4-1回顾与概述
约束 按功能划为:NOT NULL(非空约束),PRIMARY KEY(主键约束),UNQUE KEY(唯一约束),DEFAULT(默认约束),FOREIGN KEY(外键约束)
按数据列的数目划分为:表级约束(2个和2个以上),列级约束(某1个字段)
默认约束和非空约束只存在列级约束
修改数据表:针对字段的操作:添加或者删除字段、修改列定义,修改列名称等
针对约束的操作:添加或者删除各种约束
针对数据表的操作:数据表更名(两种方式)
4-2记录的操作 增删改查 INSERT
先启动数据库
net start mysql
mysql -uroot -proot
USE test
先建个数据表
CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,password VARCHAR(20) NOT NULL,age TINYINTINT UNSIGNED NOT NULL DEFAULT 10,sex BOOLEAN);
SHOW COLUMNS FROM users;先看看这个表
INSERT users VALUES(NULL,'TOM','123',21,1);这里id的值设为空,查看一下可以看到从1自动的开始了
SHOW COLUMNS FROM users;
SELECT * FROM users;
INSERT users VALUES(NULL,'JOHN','456',25,1);
SHOW COLUMNS FROM users;
SELECT * FROM users; 可以看到JOHN的id自动的变为了2,也可以把NULL变成DEFAULT,即变成默认值,例如再加一行
INSERT users VALUES(NULL,'LUCY','000',23,2);
SHOW COLUMNS FROM users;
SELECT * FROM users;可以看到从NULL的形式改成DEFAULT形式后,id仍然是自动的在进行加
注意:利用INSERT时,每一部分都得赋值,例如如果sex部分不赋值,写成INSERT users VALUES(DEFAULT,'LILY','555',25);则会提示错误,不匹配了
在用INSERT进行赋值的时候,可以不写具体的值,可以用表达式,例如可以把年龄改成表达式形式
INSERT users VALUES(DEFAULT,'KATE','666',3*7-5,2);
SHOW COLUMNS FROM users;
SELECT * FROM users;
可以看到年龄那一部分自动改成了16
刚才的age字段存在默认值10,如果想继续把age赋予10的话,可以写10,也可以写DEFAULT,测试一下
INSERT users VALUES(DEFAULT,'TOM','123',DEFAULT,1);
SHOW COLUMNS FROM users;
SELECT * FROM users;可以看到年龄自动为10
可以同时的写入几个字段,例如INSERT users VALUES(DEFAULT,'TOM','123',3*7-5,2),(NULL,'ROSE',md5('123'),DEFAULT,0);md5('123')为密码对应的hash值
SELECT * FROM users;
删除某一行的话可以使用DELETE FROM users5 WHERE id=(某行的行数);
4-3 插入记录 第二种方法 INSERT SET-SELECT
说明:与第一种方式的区别在于,此方法可以使用子查询(SubQuery),这个方法只能一次性插入一条记录
INSERT users SET username='BEN',password='456';
SELECT * FROM users;
第三种方法写入记录 INSERT SELECT 这种方法可以将查询结果插入到制定的数据表中(学完select后再回来用)
4-4 单表更新记录UPDATE,带条件的操作
UPDATE users SET age =age+5; 这是对每个age都加上5,SELECT一下看看结果
SELECT * FROM users5;可以看到每一个age的值都加上了5
UPDATE users SET age=age-id,sex=0;也就是让age等于age-id的值,让sex都等于0
SELECT * FROM users5;这是所有的都更新了
接下来让id为偶数的age每个都加上10,用到WHERE id%2=0
UPDATE users SET age=age+10 WHERE id%2=0;
SELECT * FROM users;敲回车可以看到id为偶数的age值都加了10
4-5删除记录(单表删除)
DELETE FROM tb1_name [WHERE where_condition];
和上面的UPDATE一样,省略WHERE将删除数据表中的全部记录
DELETE FROM users WHERE id=5;
SELECT * FROM users;可以看到id=6的记录将不存在
再插入一个id记录,看看默认的id是多少。
INSERT users VALUES(NULL,'WANG','111',33,NULL);
SELECT * FROM users;可以看到,新加入的id号不是删除了的5号,而是最大的id号加1
4-6查询表达式解析
SELECT要占到总语句数量的80%以上,可以使用单独的select加上某个属性
例如SELECT VERSION();
SELECT NOW();
SELECT 3+5;
查询表达式:
每一个表达式表示想要的一列,必须有至少一个。
多个列之间以英文逗号分隔。
星号(*)表示所有列。tb_name.*可以表示命名表的所有列。
查询表达式可以使用[AS]alias_name 为其赋予别名。
别名可用于GROUP BY,ORDRE BY 或HAVING子句。
SELECT id,username FROM users;
SELECT username,id FROM users;
SELECT users.id,users.username FROM users;
别名 SELECT id AS userid,username uname FROM users;
SELECT id username FROM users; 出现一个username表示id,所以使用别名的时候要加上AS关键词
4-7 WHERE语句进行条件查询
条件表达式
对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。
在WHERE表达式中,可以使用mysql支持的函数或者运算符。
4-8查询结果分组
SELECT * FROM users;
SELECT sex FROM users GROUP BY sex; 按照性别对表格上所看到的8个人进行分组
4-9 HAVING 语句设置分组条件
[HAVING where_condition]
SELECT sex FROM users GROUP BY 1 HAVING age>35;会出错
SELECT sex,age FROM users GROUP BY 1 HAVING age>35;
SELECT sex FROM users GROUP BY 1 HAVING count(id)>=2;
4-10对查询结果进行排序 ORDER BY
SELECT * FROM users;
SELECT * FROM users ORDER BY id DESC;
SELECT * FROM users ORDER BY age,id DESC;
4-11限制查询结果返回的数量
SELECT * FROM users;
SELECT * FROM users LIMIT 2;
SELECT * FROM users LIMIT 3,2;
SELECT * FROM users LIMIT 3,2;
SELECT * FROM users ORDER BY id DESC;
SELECT * FROM users ORDER BY id DESC LIMIT 2,2;
插入语句
CREATE TABLE test(id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20));
SELECT * FROM test;可以看到test表刚刚创建成功,里边不存在任何的记录
现在准备把users表当中年龄大于30的记录的用户名写入到test表当中。
INSERT test(username) SELECT username FROM users WHERE age>=30;
SELECT * FROM test;
ASC DESC
4-12 本节知识点
记录操作
INSERT(插入)
UPDATE(单表更新)
DELETE(单表删除)
SELECT(最常用的语句)
约束 按功能划为:NOT NULL(非空约束),PRIMARY KEY(主键约束),UNQUE KEY(唯一约束),DEFAULT(默认约束),FOREIGN KEY(外键约束)
按数据列的数目划分为:表级约束(2个和2个以上),列级约束(某1个字段)
默认约束和非空约束只存在列级约束
修改数据表:针对字段的操作:添加或者删除字段、修改列定义,修改列名称等
针对约束的操作:添加或者删除各种约束
针对数据表的操作:数据表更名(两种方式)
4-2记录的操作 增删改查 INSERT
先启动数据库
net start mysql
mysql -uroot -proot
USE test
先建个数据表
CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,password VARCHAR(20) NOT NULL,age TINYINTINT UNSIGNED NOT NULL DEFAULT 10,sex BOOLEAN);
SHOW COLUMNS FROM users;先看看这个表
INSERT users VALUES(NULL,'TOM','123',21,1);这里id的值设为空,查看一下可以看到从1自动的开始了
SHOW COLUMNS FROM users;
SELECT * FROM users;
INSERT users VALUES(NULL,'JOHN','456',25,1);
SHOW COLUMNS FROM users;
SELECT * FROM users; 可以看到JOHN的id自动的变为了2,也可以把NULL变成DEFAULT,即变成默认值,例如再加一行
INSERT users VALUES(NULL,'LUCY','000',23,2);
SHOW COLUMNS FROM users;
SELECT * FROM users;可以看到从NULL的形式改成DEFAULT形式后,id仍然是自动的在进行加
注意:利用INSERT时,每一部分都得赋值,例如如果sex部分不赋值,写成INSERT users VALUES(DEFAULT,'LILY','555',25);则会提示错误,不匹配了
在用INSERT进行赋值的时候,可以不写具体的值,可以用表达式,例如可以把年龄改成表达式形式
INSERT users VALUES(DEFAULT,'KATE','666',3*7-5,2);
SHOW COLUMNS FROM users;
SELECT * FROM users;
可以看到年龄那一部分自动改成了16
刚才的age字段存在默认值10,如果想继续把age赋予10的话,可以写10,也可以写DEFAULT,测试一下
INSERT users VALUES(DEFAULT,'TOM','123',DEFAULT,1);
SHOW COLUMNS FROM users;
SELECT * FROM users;可以看到年龄自动为10
可以同时的写入几个字段,例如INSERT users VALUES(DEFAULT,'TOM','123',3*7-5,2),(NULL,'ROSE',md5('123'),DEFAULT,0);md5('123')为密码对应的hash值
SELECT * FROM users;
删除某一行的话可以使用DELETE FROM users5 WHERE id=(某行的行数);
4-3 插入记录 第二种方法 INSERT SET-SELECT
说明:与第一种方式的区别在于,此方法可以使用子查询(SubQuery),这个方法只能一次性插入一条记录
INSERT users SET username='BEN',password='456';
SELECT * FROM users;
第三种方法写入记录 INSERT SELECT 这种方法可以将查询结果插入到制定的数据表中(学完select后再回来用)
4-4 单表更新记录UPDATE,带条件的操作
UPDATE users SET age =age+5; 这是对每个age都加上5,SELECT一下看看结果
SELECT * FROM users5;可以看到每一个age的值都加上了5
UPDATE users SET age=age-id,sex=0;也就是让age等于age-id的值,让sex都等于0
SELECT * FROM users5;这是所有的都更新了
接下来让id为偶数的age每个都加上10,用到WHERE id%2=0
UPDATE users SET age=age+10 WHERE id%2=0;
SELECT * FROM users;敲回车可以看到id为偶数的age值都加了10
4-5删除记录(单表删除)
DELETE FROM tb1_name [WHERE where_condition];
和上面的UPDATE一样,省略WHERE将删除数据表中的全部记录
DELETE FROM users WHERE id=5;
SELECT * FROM users;可以看到id=6的记录将不存在
再插入一个id记录,看看默认的id是多少。
INSERT users VALUES(NULL,'WANG','111',33,NULL);
SELECT * FROM users;可以看到,新加入的id号不是删除了的5号,而是最大的id号加1
4-6查询表达式解析
SELECT要占到总语句数量的80%以上,可以使用单独的select加上某个属性
例如SELECT VERSION();
SELECT NOW();
SELECT 3+5;
查询表达式:
每一个表达式表示想要的一列,必须有至少一个。
多个列之间以英文逗号分隔。
星号(*)表示所有列。tb_name.*可以表示命名表的所有列。
查询表达式可以使用[AS]alias_name 为其赋予别名。
别名可用于GROUP BY,ORDRE BY 或HAVING子句。
SELECT id,username FROM users;
SELECT username,id FROM users;
SELECT users.id,users.username FROM users;
别名 SELECT id AS userid,username uname FROM users;
SELECT id username FROM users; 出现一个username表示id,所以使用别名的时候要加上AS关键词
4-7 WHERE语句进行条件查询
条件表达式
对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。
在WHERE表达式中,可以使用mysql支持的函数或者运算符。
4-8查询结果分组
SELECT * FROM users;
SELECT sex FROM users GROUP BY sex; 按照性别对表格上所看到的8个人进行分组
4-9 HAVING 语句设置分组条件
[HAVING where_condition]
SELECT sex FROM users GROUP BY 1 HAVING age>35;会出错
SELECT sex,age FROM users GROUP BY 1 HAVING age>35;
SELECT sex FROM users GROUP BY 1 HAVING count(id)>=2;
4-10对查询结果进行排序 ORDER BY
SELECT * FROM users;
SELECT * FROM users ORDER BY id DESC;
SELECT * FROM users ORDER BY age,id DESC;
4-11限制查询结果返回的数量
SELECT * FROM users;
SELECT * FROM users LIMIT 2;
SELECT * FROM users LIMIT 3,2;
SELECT * FROM users LIMIT 3,2;
SELECT * FROM users ORDER BY id DESC;
SELECT * FROM users ORDER BY id DESC LIMIT 2,2;
插入语句
CREATE TABLE test(id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20));
SELECT * FROM test;可以看到test表刚刚创建成功,里边不存在任何的记录
现在准备把users表当中年龄大于30的记录的用户名写入到test表当中。
INSERT test(username) SELECT username FROM users WHERE age>=30;
SELECT * FROM test;
ASC DESC
4-12 本节知识点
记录操作
INSERT(插入)
UPDATE(单表更新)
DELETE(单表删除)
SELECT(最常用的语句)