cgb2109-day02
Posted cgblpx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cgb2109-day02相关的知识,希望对你有一定的参考价值。
一,字段约束
–1,唯一约束
哪个字段添加了唯一约束,从此,字段值不能相同,使用unique
C:\\Users\\WangYiBo>mysql -uroot -proot
#使用用户名root和密码root来连接数据库
mysql> show databases; #展示所有数据库
mysql> use cgb210901; #使用指定的数据库
mysql> show tables; #展示所有表
#唯一约束:添加后,字段值不能重复
CREATE TABLE d( #创建表
tel CHAR(11) UNIQUE #唯一约束
#字段名称 字段类型(字段长度)
);
INSERT INTO d VALUES('12345678901'); #成功
INSERT INTO d VALUES('12345678901'); #报错,值相同啦.
#Duplicate entry '12345678901' for key 1
练习:
mysql> create table e( #创建表
-> password varchar(10) not null unique
#字段名称 字段类型(字段长度) 非空约束 唯一约束
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into e values(null); #报错,字段值不符合非空约束
ERROR 1048 (23000): Column 'password' cannot be null
mysql> insert into e values('123'); #正确的,因为满足了非空约束和唯一约束
Query OK, 1 row affected (0.00 sec)
mysql> insert into e values('123');#报错,字段值不符合唯一约束
ERROR 1062 (23000): Duplicate entry '123' for key 1
mysql>
–2,主键约束
每个表都应该设计主键 , 主键是每条记录/数据的唯一标识.
现象是: 字段的值必须唯一且不能为空,使用primary key
主键自增策略: 使用auto_increment,让主键的值交给数据库自动维护
mysql> create table g(
#字段名 字段类型 主键 自增
-> id int primary key auto_increment,
-> name varchar(100),
-> age int
-> );
Query OK, 0 rows affected (0.00 sec)
#主键的值不用自己设置null,数据库会自增
mysql> insert into g values(null,'tony',18);
Query OK, 1 row affected (0.00 sec)
mysql> select * from g;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | tony | 18 |
+----+------+------+
1 row in set (0.00 sec)
二,基本函数
–1,工具的使用
1,找到.exe程序,双击,输入了密码,点击连接,就可以了
2,创建库: 右键-新建数据库-设置数据库名-选字符集utf8-确定
3,创建表: 右键-创建表-输入字段名字段类型字段长度字段约束-创建表-输入表名-确定
4,添加表里的记录,如下图
–2,准备数据
CREATE TABLE dept(
deptno int primary key auto_increment ,
dname VARCHAR(20),
loc VARCHAR(13)
);
INSERT INTO dept VALUES(null,'accounting','一区');
INSERT INTO dept VALUES(null,'research','二区');
INSERT INTO dept VALUES(null,'operations','二区');
CREATE TABLE emp(
empno int primary key auto_increment,
ename VARCHAR(10),
job VARCHAR(10),
mgr int,
hiredate DATE,
sal double,
comm NUMERIC(7,2),
deptno int
);
INSERT INTO emp VALUES(100,'jack','副总',NULL,'2002-05-1',90000,NULL,1);
INSERT INTO emp VALUES(200,'tony','总监',100,'2015-02-02',10000,2000,2);
INSERT INTO emp VALUES(300,'hana','经理',200,'2017-02-02',8000,1000,2);
INSERT INTO emp VALUES(400,'leo','员工',300,'2019-02-22',3000,200.12,2);
INSERT INTO emp VALUES(500,'liu','员工',300,'2019-03-19',3500,200.58,2);
–3,基础函数的使用
lower–全转小写
upper–全转大写
length–求长度
substr–截取子串
concat–拼接字符串
replace–替换
#SQL中的函数
#SELECT 列名1,列名2 FROM 表名
SELECT * FROM emp #查询所有列
SELECT ename FROM emp #查名字
SELECT empno,ename FROM emp #查编号和名字
SELECT empno a FROM emp #给列设置别名
#UPPER转大写 列名 列的别名
SELECT ename,UPPER(ename) a FROM emp
#lower转小写 列名
SELECT ename,LOWER(ename) FROM emp
#length求长度,根据u8,一个字母或数字长度为1,一个汉字长度为3
SELECT ename,LENGTH(ename) FROM emp#查ename的长度
SELECT ename,job,LENGTH(job) FROM emp#查job的长度
#substr截取子串
#SUBSTR(a,b)-a是截取谁b是从哪个字符开始
SELECT ename,SUBSTR(ename,2) FROM emp
#SUBSTR(a,b,c)-a是截取谁b是从哪个字符开始c是截取的长度
SELECT ename,SUBSTR(ename,2,2) FROM emp
#concat(a,b,...)拼串-a是列名b是要拼接的数据
#...是指可以有多个参数
SELECT ename,CONCAT(ename,"hello",1,2) FROM emp
#替换replace(a,b,c)-a是字段名把b换成c
SELECT ename,REPLACE(ename,'a','666') FROM emp
#ifnull(a,b)-a是字段名b是要换成的值
SELECT comm,IFNULL(comm,100) FROM emp#如果是null就换成100
#查询每个员工的月薪
SELECT sal,comm,sal+IFNULL(comm,0) FROM emp
#对小数的函数:
SELECT comm,ROUND(comm) FROM emp#四舍五入,取整
SELECT comm,ROUND(comm,1) FROM emp#四舍五入,保留1位小数
SELECT comm,CEIL(comm) FROM emp#ceil向上取整
SELECT comm,FLOOR(comm) FROM emp#floor向下取整
#对日期数据的函数:
SELECT NOW() #当前时间
SELECT YEAR('1999-1-1')
SELECT YEAR( NOW() )#当前年
SELECT MONTH( NOW() ),DAY( NOW() )#当前月,当前日
#hour时 minute分 second秒
SELECT HOUR( NOW() ),MINUTE( NOW() ),SECOND( NOW() )
#生成一个32位的随机数
SELECT UUID()
#\\表示转义符号,把'当做普通的字符在使用而不是字符串的标记
SELECT 'xi\\'an'
三,条件查询
–1,基础语法
#条件查询
#1.去重distinct
SELECT DISTINCT loc FROM dept #查询部门地址
#2.where连接查询的条件
#select 字段名 from 表名 where 字段名=字段值
#练习1:查询编号为1的部门信息
SELECT * FROM dept WHERE deptno=1
#练习2:查询编号>1的部门信息
SELECT * FROM dept WHERE deptno>1
SELECT * FROM dept WHERE deptno<2
SELECT * FROM dept WHERE deptno!=1
SELECT * FROM dept WHERE deptno<>1 #表示!=,同上
#练习3:查询名称是research的部门编号
SELECT deptno FROM dept WHERE dname='research'
#练习4:查询地址在二区编号为3的部门名称
SELECT dname FROM dept WHERE
loc='二区' AND deptno=3 #并且关系
#练习5:查询部门名称是accounting/research的部门地址
SELECT loc FROM dept WHERE
#dname='accounting' or dname='research'#或者关系
dname IN('accounting','research')#in子句in(a,b),同上
#练习6:查询编号是1 2 3的部门信息
SELECT * FROM dept WHERE
deptno IN(1,2,3)
#3.like--模糊查询,%通配符0~n个字符,_通配符1个字符
#练习1:查询名字包含a的员工信息
SELECT * FROM emp WHERE
ename LIKE '%a%' #包含a
#ename LIKE 'a_' #a后只有一个,了解
四,
以上是关于cgb2109-day02的主要内容,如果未能解决你的问题,请参考以下文章