(先行打卡,在2号中午前补上)
-
MySQL表数据类型
数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型
整型:
无符号用UNSIGNED表示;
浮点型:-
FLOAT是单精度浮点型
-
DOUBLE是双精度浮点型
-
[(M,D)],M一定大于等于D
-
比如FLOAT(7,2)代表小数点前面的数值有5位,小数点后面的数字有2位,一共加起来有7位,最大能表示99999.99
日期时间类型:
-
YEAR范围:1970 到2069
-
TIME范围:-838:59:59 到 838:59:59
-
DATE范围:1000-01-01 到 9999-12-31
-
DATETIME范围:1000-01-01 00:00:00 到 9999-12-31 23:59:59
-
TIMESTAMP范围:1970-01-01 00:00:00 到 2037-12-31 23:59:59
字符型:
-
CHAR(M):这是定长类型,比如CHAR(5),值为ABC,但是存储的时候,会在ABC后面补齐两个空格补齐5位
-
VARCHAR(M):这是变长类型,比如比如VARCHAR(5),值为ABC,存储的时候就只存ABC
-
L+ x 个字节:是指最佳的存储范围
-
ENUM:枚举值,给出选项供选择
-
SET:集合,比如SET(‘A’,‘B’,‘C’),可以只选择A,也可以只选择B,也可以只选择BC,等于可以在这个集合中选择任意的排列组合
-
-
用SQL语句创建表
语句解释
数据表又称表,是数据库最重要的组成部分之一,是其他对象的基础,行称之为记录,列称之为字段。
如果是在命令行界面:
首先通过USE命令打开数据库,USE 数据库名;
接着检查打开的数据库是否正确,SELECT DATABASE();
最后创建数据库的表结构:CREATE TABLE [IF NOT EXISTS] table_name ( column_name data_type,……)
设定列类型 、大小、约束
约束的情况主要有:非空约束,主键约束,唯一约束,默认约束。**非空约束:** NULL,字段值可以为空;NOT NULL,字段值禁止为空 CREATE TABLE tb2( username VARCHAR(20) NOT NULL, age TINYINT UNSIGNED NULL ); **主键约束:** 1. 每张数据表只能存在一个主键 2. 联合主键和复合主键 当表中只有一个主键时,它是唯一的索引;当表中有多个主键时,称为复合主键,复合主键联合保证唯一索引。 联合主键是指:主键A跟主键B的数据可以完全相同,联合就在于主键A跟主键B形成的联合主键是唯一的。 其中的区别是:复合主键就是含有一个以上的字段组成,如ID+name,ID+phone等,而联合主键要同时是两个表的主题组合起来的。 3. 主键保证记录的唯一性 4. 主键自动为NOT NULL 5. AUTO_INCREMENT必须和主键一起使用,但是主键不一定必须和AUTO_INCREMENT使用; 自动编号,且必须与主键组合使用,默认情况下,起始值为1,每次的增量为1,依次递增。所以该字段数据类型一定是数值型:整数,浮点数都可以,浮点数小数位数必须为0。 CREATE TABLE tb3( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL ); **唯一约束:** 因为主键一张表只有一个,如果想保证唯一性,可以使用UNIQUE KEY(唯一约束); 1. 唯一约束可以保证记录的唯一性 2. 唯一约束的字段可以为空值(NULL)(这里比较难以理解:因为既然可以为空值,那么2条或者2条以上的记录如果都为空值,都为空值就是相同的,岂不是违背了唯一性?其实这里存储的时候,多个空值只会保存一个空值,所以并不违背唯一性) 3. 每张数据表可以存在多个唯一约束 CREATE TABLE tb5( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL UNIQUE KEY, age TINYINT UNSIGNED ); **默认约束:** 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值 ,关键词为 DEFAULE; CREATE TABLE tb61( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE KEY, sex ENUM('1','2','3') DEFAULT '3' );
-
用SQL语句向表中添加数据
三种种插入记录的方法:(insert,insert set,insert select)
INSERT:
INSERT 表名 VALUES(NULL,‘Tom’,‘123’,25,1);
此方法可以插入多条数据;
INSERT SET:
INSERT 表名 SET username=‘BEn’, password=‘456’;
与指定列名插入方法区别在于:此方法可以使用子查询,且一次只允许插入一个记录,我们用此方法插入一条记录:
INSERT SELECT:
INSERT SELECT可以将查询的结果写入数据表INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
-
用SQL语句删除表
语句解释
DELETE
DROP
TRUNCATE
不同方式的区别 -
用SQL语句修改表
修改列名
修改表中数据
删除行
删除列
新建列
新建行
项目三:超过5名学生的课(难度:简单)
创建如下所示的courses 表 ,有: student (学生) 和 class (课程)。
例如,表:
±--------±-----------+
| student | class |
±--------±-----------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
| A | Math |
±--------±-----------+
编写一个 SQL 查询,列出所有超过或等于5名学生的课。
应该输出:
±--------+
| class |
±--------+
| Math |
±--------+
Note:
学生在每个课中不应被重复计算。
项目四:交换工资(难度:简单)
创建一个 salary表,如下所示,有m=男性 和 f=女性的值 。
例如:
id | name | sex | salary |
---|---|---|---|
1 | A | m | 2500 |
2 | B | f | 1500 |
3 | C | m | 5500 |
4 | D | f | 500 |
交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求使用一个更新查询,并且没有中间临时表。
运行你所编写的查询语句之后,将会得到以下表:
id | name | sex | salary |
---|---|---|---|
1 | A | f | 2500 |
2 | B | m | 1500 |
3 | C | f | 5500 |
4 | D | m | 500 |