在数据库中创建表,并进行 CRUD 操作。
在库中进行表操作,先use 库名
进入库提示Database changed
创建一个表:
mysql> CREATE TABLE student(
-> sno INT UNSIGNED,
-> name VARCHAR(20),
-> sex CHAR,
-> sight FLOAT(2,1),
-> birth DATE,
-> phone CHAR(11)
-> );
查看表:
mysql> show tables;
查看某一个表(student)内容:
mysql> desc student;
删除表:
mysql> DROP TABLE student;
修改表的结构信息使用 ALTER TABLE
语句,具体参数要查阅文档。
1. INSERT INTO student VALUES(1001,'张三','男',4.8,'1999-8-16','17671874644');
2. INSERT INTO student (name, sno, birth) VALUES('张四',1002,'1999-8-10’);
3. /*指定插入*/
1. SELECT * FROM student;
2. /*查student表中所有字段*/
3. SELECT name,phone,sno FROM student;
4. /*查student表中name、phone、sno字段*/
SELECT 语句执行后会得到一个查询结果集,可能为空集。
WHERE子句:必须和其他语句配合使用(通常和 SELECT 语句配合使用),用于设置操作条件,即只有满足其后面的条件才执行相关操作。
使用 LIKE 关键字,通配符_表示1个任意字符,通配符% 表示 0 或 多个任意字符。
1. SELECT name,phone,sno FROM student WHERE name LIKE '张%';
/*查student表中姓张的所有人的姓名、手机号、学号*/
2. SELECT name,phone,sno FROM student WHERE name LIKE '张__';
/*查student表中姓张(三个字)的所有人的姓名、手机号、学号*/
3. SELECT name,phone,sno FROM student WHERE name LIKE '__';
/*查student表中名字两个字的所有人的姓名、手机号、学号*/
BETWEEN AND:如果字段介于某个范围;
SELECT * FROM student WHERE sno BETWEEN 1002 AND 1004;
/*查询student表中所有学号在1002到1004这个闭区间内的对象信息*/
单独使用:删除某个表DELETE FROM 表名
配合使用:
DELETE FROM student WHERE sex IS NULL ;
/*清空表中sex为NULL的对象;*/
UPDATE student SET name = '张三丰',sex='女' WHERE name='张三';
/*将student表中所有名字叫张三的名字修改成张三丰、性别修改成女*/
对数据库的数据进行合法性检查,将非法数据据之门外。
约束分为以下五种:
字段的值不能为 NULL,但可以设默认值;
CREATE TABLE 表名 (a INT,b INT NOT NULL,c INT NOT NULL DEFAUAT 100;
/*创建一个表,规定输入时 b 字段不能为空,c 字段不输入(NULL)会等于默认值100*/
字段的值不能重复,但可以为NULL;
CREATE TABLE 表名 (a INT UNIQUE);
/*创建一个表,规定输入时,a字段不能与表内同a字段重复*/
非空并且唯一,用来唯一地标识一条记录,可以为一个字段,也可以为多个字段。
CREATE TABLE 表名 (a INT PRIMARY KEY);
/*创建一个表,规定输入时,a字段不能为NULL且a字段不能与表内同a字段重复*/
CREATE TABLE 表名 (a INT,b INT,PRIMARY KEY(a,b))
/*创建一个表,规定输入时,a、b字段不能为NULL且a、b字段不能与同时表内同a、b字段都重复,可以重复某一个*/
字段只能属于其他表中的某个字段内的内容;能作为引用的表中 的内容必须是唯一键/主键;
CREATE TABLE A (a INT UNIQUE); //创一个表为A,有INT型唯一健;
CREATE TABLE B (b INT, FOREIGN KEY (b) PREFERENCES A(a)); //创建一个表B,a字段只能属于A表内的a字段某值或NULL;
当清空A时,B内没有清空,则删除失败,必须把B内引用的删除/清空才能清空A
级联(CASCADE):多个表引用同一个表时,被引用表改变或删除,其他表内对应的数值也会改变或删除
CREATE TABLE B (b INT, FOREIGN KEY (b) PREFERENCES A(a) ON DELETE CASCADE);
/*设置外键约束的同时,若上级删除(清空),对应的也会被删除*/
同理:修改UPDATE 替换 DELETE
限制字段的取值范围;
CREATE TABLE A (a INT CHECK (a < 5 and a > 2)); //限定a字段只能小于2大于5,可为NULL
ALTER TABLE (约束条件通常是在创建表时进行设置,当然也可以)
更改已存在表的结构约束:
ALTER TABLE student MODIFY sno INT UNSIGNED PRIMARY KEY;
/*将student表中sno字段设成主键约束*/
ALTER TABLE student MODIFY name VARCHAR(20) NOT NULL;
/*将student表中sno字段设成非空约束*/
ALTER TABLE student MODIFY sex CHAR(1) CHECK (sex='男' OR sex='女');
/*将student表中sno字段设成检查约束sex=男/女*/
ALTER TABLE student MODIFY phone CHAR(11) UNIQUE;
/*将student表中sno字段设成唯一约束*/
select * from student order by sight; //asc是升序(默认)
/*将所有人的信息按sight升序排列*/
select * from student order by sight DESC;
/*将所有人的信息按sight降序排列*/
select * from student order by sight DESC,birth asc, sex DESC;
/*将所有人的信息按一级sight降序、二级birth升序、三级sex降序排列*/
TOP N 问题:联合使用 ORDER BY 子句和 LIMIT 子句实现。
select * from student order by sight DESC,birth asc, sex DESC LIMIT 3;
/*将所有人的信息按一级sight降序、二级birth升序、三级sex降序排列,并只显示前三个*/
DISTINCT 关键字:过滤重复的字段值。
select DISTINCT sex from student;
/*不重复显示student中sex类*/
单行函数:对单条记录进行处理,比如:LEFT、LENGTH等。
聚合(多行)函数:对多条记录进行处理,比如 COUNT、MAX、MIN、AVG、SUM 等。
left(字段,N) //筛选出字段前N个字段、IN(集合)
select name sex, phone from student WHERE left(phone,4) IN ('130','131','132','176');
/*筛选(left)出表student中phone字段前3个位属于(IN)中的name和sex;*/
聚合函数count()
select count(*) from student
/*统计student表中所有对象的总数*/
select count(*) from student where sex='女';
/*统计student表中所有对象的sex字段为'女'的总数*/
分组查询:GROUP BY 子句,通常和聚合函数、HAVING 子句配合使用;
select sex, AVG(sight) FROM student GROUP BY sex;
/*显示sex各类对应所有的sight的平均值以sex类分组显示*/
select sex AS '性别', AVG(sight) AS '平均视力' FROM student GROUP BY sex;
/*接上,将表格上栏改成性别与平均视力*/
select sex AS '性别', AVG(sight) AS '平均视力' FROM student GROUP BY sex HAVING sex='男';
/*接上,HAVING对分组完后的数据筛选出sex='男'的对象*/