测试时间类型数据+完整性约束条件+表相关操作

一、测试时间类型数据

在这里插入图片描述

1、测试YEAR

建表
在这里插入图片描述
插入数据
在这里插入图片描述
查表在这里插入图片描述
year的范围是1901到2155在这里插入图片描述
输入超过这个范围的数值会报错
在这里插入图片描述
当日期以字符串形式插入也可以在这里插入图片描述
当插入的是两位数字或者两位字符串时,00-69之间或转换到2000-2069年;70-99之间会转换成1970-1999年之间
在这里插入图片描述
当插入数字0时,我们得到是数字0
在这里插入图片描述
当插入的是字符串0时,得到的是2000年
在这里插入图片描述

2、TIME类型

在这里插入图片描述
在time里面第一个值36等于1天24小时+12小时,第一个值=天数*24+小时数

省略秒数在这里插入图片描述
当插入的是一个四位数时,小时的位置省略掉,存入的是分钟和秒数
在这里插入图片描述
如何插入的是两位数,那么插入的是秒数
在这里插入图片描述
在time里面不管是字符串的0还是整数0,得到的都是四个0
在这里插入图片描述
在这里插入图片描述
如果插入的值超过了存储范围,则会报错
在这里插入图片描述

3、测试date

输入字符串,年月日之间用“-”分割
在这里插入图片描述
或者是用/分割
在这里插入图片描述
或者是120706
在这里插入图片描述

二、完整性约束条件

在这里插入图片描述

1、主键

主键:唯一标识符,一般会加到无意义字段上,例如编号。注意:被标记成主键的字段数值不能重复,且自动非空。

建表:

mysql> CREATE TABLE IF NOT EXISTS user1(
    -> id INT PRIMARY KEY,
    -> username VARCHAR(20)
    -> );

查看表结构

mysql> DESC user1;

在这里插入图片描述
key这一列显示PRI则表示主键
查看创建表的定义

mysql> SHOW CREATE TABLE 表名;

在这里插入图片描述
可以看到PRIMARY KEY 是id字段
插入数据

INSERT user1 VALUES(1,'king');
INSERT user1 VALUES(2,'QUEEN');

查看表
在这里插入图片描述
被标记成主键的字段数值不能重复
查看信息的时候可以通过主键来查询

SELECT * FROM user1 WHERE id=1;

在这里插入图片描述
多字段主键:

mysql> CREATE TABLE IF NOT EXISTS user3(
    -> id INT,
    -> username VARCHAR(20),
    -> card CHAR(18),
    -> PRIMARY KEY(id, card)
    -> );

查看表结构:
在这里插入图片描述
可以看出来有两个主键字段PRI
这是复合主键——一个主键,多字段主键
一个表中只能有一个主键,不能有多个主键
当id一样,card不一样时,是两条记录
注意:索引的时候,将复合主键的第一个字段作为索引
在这里插入图片描述
创建主键的时候可以将PIRMARY KEY 简写为KEY
主键字段可以是任意的,只要保证该字段没有重复记录即可。

2、自增长

自增长:让新增加的用户编号自动增加1
**注意:**一个表中只能有一个自增长字段,而且这个自增长需要配合主键来使用
被标记成自增长的字段一定是主键,但是主键不一定是自增长的
自增长只对整数字段有效果,对字符串没有意义
创建表六,令编号字段作为主键,且复合自增长

mysql> CREATE TABLE IF NOT EXISTS user6(
    -> id SMALLINT KEY AUTO_INCREMENT,
    -> username VARCHAR(20)
    -> );

在这里插入图片描述
插入数据,第一种可以指定编号
在这里插入图片描述
或者是只给用户名字段赋值
在这里插入图片描述
查看表
在这里插入图片描述
当我们不指定标号,只给其他字段赋值的时候,得到的自增长编号是已有编号最大值加一

mysql> INSERT user6 VALUES(111,'little star');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM user6;

在这里插入图片描述

mysql> INSERT user6(username) VALUES('QUEEN1');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM user6;

在这里插入图片描述
我们可以查看一下表的定义

mysql> SHOW CREATE TABLE user6;

在这里插入图片描述
此时,表的自增长编号为113,下一个自增长编号为113

编号字段插入null值也是可以的

mysql> INSERT user6 VALUES(NULL, 'AAAA');
Query OK, 1 row affected (0.01 sec)

在这里插入图片描述
或者是defualt:INSERT user6 VALUES(DEFAULT,‘CUT STAR’);
在这里插入图片描述
也可以在创建的时候,定义好自增长的初始值

mysql>  CREATE TABLE IF NOT EXISTS use8(
    -> id SMALLINT KEY AUTO_INCREMENT,
    -> username VARCHAR(20)
    -> )AUTO_INCREMENT=100;

在这里插入图片描述
更改自增长编号

 ALTER TABLE user8 AUTO_INCREMENT=500;

在这里插入图片描述

3、非空约束

非空约束:用户名和密码字段一定要非空

mysql> CREATE TABLE IF NOT EXISTS user_1(
    -> id INT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL,
    -> password CHAR(32) NOT NULL,
    -> age TINYINT UNSIGNED
    -> );

其中,id是非负的,既是逐渐,也复合自增长
username不为空,密码不为空,年龄不为负数
在这里插入图片描述
插入数据:由于用户名和密码一定不能为空,我们可以只给这两个字段赋值,由于id字段是主键且自增长,所以可以不赋值

INSERT user_1(username,password) VALUES('KING',123456);

在这里插入图片描述
也可以给年龄字段赋值

 INSERT user_1(username,password,age) VALUES('queen',151265,18);

在这里插入图片描述

4、测试默认值

一般来说not null 会配合默认值一起使用

CREATE TABLE IF NOT EXISTS user_2(

id INT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,

password CHAR(32) NOT NULL,
age TINYINT UNSIGNED DEFAULT 18,
addr VARCHAR(50) NOT NULL DEFAULT '北京',
sex ENUM('男','女','保密') NOT NULL DEFAULT '男'
);

在这里插入图片描述
地址和性别字段不能为空,但是如果不赋值的话,就以默认值输入

插入数据,值给不能为空的用户名和密码赋值

 INSERT user_2(username,password) VALUES('queen',151265);

在这里插入图片描述
其他字段按照默认值输入
当所有的字段都赋值的时候就按照我们的赋值进行输入

 INSERT user_2 VALUES(2,'king',151265,25,'上海','保密');

在这里插入图片描述
或者是INSERT user_2 VALUES(2,‘king’,151265,DEFAULT,‘上海’,‘保密’);

在默认值字段使用default值

5、唯一UNIQUE

UNIQUE KEY 中key可以省略掉
PRIMARY KEY中PRIMARY可以省略掉
一个表中只能有一个主键,但是可以有多个唯一
null值不算重复值

mysql> CREATE TABLE IF NOT EXISTS user_3(
    -> id INT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL UNIQUE,
    -> card CHAR(18) UNIQUE
    -> );

在这里插入图片描述

SHOW CREATE TABLE user_3;

在这里插入图片描述
其中有两个唯一索引:username和card

我们可以只给用户名赋值

INSERT user_3(username) VALUES('A');

INSERT user_3(username) VALUES('A1');

在这里插入图片描述
card部分没有给值,默认是null,null值不算重复

给身份证赋值INSERT user_3(username,age) VALUES('b',111);

在这里插入图片描述
身份证字段填写null是可成功的
在这里插入图片描述
总结,建表语法结构:
CREATE TABLE [IF NOT EXISTS0] 表名称(
字段名称 字段类型 [UNSIGNED|ZEROFILL] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY| UNIQUE [KEY]] [AUTO_INCREMENT]
)ENGINES=INNODB CHARSET=utf8 AUTO_INCREMENT=100;

按照上述的顺序进行编辑或省略

三、表相关操作

1、重命名数据表

CREATE TABLE IF NOT EXISTS user_4(
id SMALLINT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL UNIQUE,
password CHAR(32) NOT NULL,
email VARCHAR(50) NOT NULL DEFAULT '852989197@qq.com',
age TINYINT UNSIGNED DEFAULT 18,
sex ENUM('男','女','保密') DEFAULT '保密',
addr VARCHAR(200) NOT NULL DEFAULT '北京',
salary FLOAT(6,2),
regTime INT UNSIGNED,
face CHAR(100) NOT NULL DEFAULT 'default.jpg'
)ENGINE=INNODB CHARSET=UTF8;

查看表结构
在这里插入图片描述
修改表名 :
ALTER TABLE 原表名 RENAME 【TO | AS】新表名;
或者是RENAME TBALE user_4 TO user_5;

2、添加和删除字段——都是通过ALTER语句来实现的

ALTER TABLE 表名 ADD card字段 CHAR(18)类型;
在这里插入图片描述
添加字段并赋约束条件

ALTER TABLE user_4 ADD test1 VARCHAR(100) NOT NULL UNIQUE;

在这里插入图片描述
将字段添加到第一个位置

ALTER TABLE user_4 ADD test2 VARCHAR(20) NOT NULL FIRST;

在这里插入图片描述
添加到指定位置之后

ALTER TABLE user_4 ADD test3 INT NOT NULL DEFAULT 1OO AFTER username;

在这里插入图片描述
选中一个表,一次进行多项操作

ALTER TABLE user_4
ADD test4 INT NOT NULL DEFAULT 123 AFTER password,
ADD test5 FLOAT(6,2) FIRST,
ADD test6 SET('A','B','C'); 

在这里插入图片描述
添加和删除同时进行

ALTER TABLE user_4
ADD test INT UNSIGNED NOT NULL DEFAULT 10 AFTER sex,
DROP addr;

在这里插入图片描述

3、修改字段

(1)MODIFY只能修改字段类型和位置,但是不能修改字段名称

ALTER TABLE 表名称 MODIFY 字段名称 字段类型 完整性约束条件 位置

ALTER TABLE user_4 MODIFY email VARCHAR(200);

将email字段的存储空间改为200,但是原来的完整性约束条件没有了
在这里插入图片描述
改变类型的时候,需要确保其他完整性约束条件

ALTER TABLE user_4 MODIFY email VARCHAR(50) NOT NULL DEFAULT '852989197@qq.com';

修改字段的位置
将card 字段修改到test 字段之后

ALTER TABLE user_4 MODIFY card CHAR(18) AFTER test;

在这里插入图片描述

ALTER TABLE user_4 MODIFY test VARCHAR(32) NOT NULL DEFAULT '123' FIRST;

(2)使用change关键字来修改字段名称

ALTER TABLE 表明 CHANGE 旧字段名称 新字段名称 字段类型 完整性约束条件 位置
例如:将test字段改名为test1,其他都不变

ALTER TABLE user_4 CHANGE test test1 CHAR(32) NOT NULL DEFAULT '123';

可以同时修改字段名称和位置以及属性

 ALTER TABLE user_4 CHANGE test1 test VARCHAR(32) NOT NULL AFTER username;

仅改变属性的情况

ALTER TABLE user_4 CHANGE test test INT;

CHANGE可以完成MODIFY的功能,但是大可不必,我们可以直接通过MODIFY来修改字段的类型等

4、 添加删除默认值

mysql> CREATE TABLE IF NOT EXISTS user_5(
    -> id TINYINT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL UNIQUE,
    -> age TINYINT UNSIGNED
    -> );

在这里插入图片描述

 ALTER TABLE user_5 ALTER age SET DEFAULT 18;

在这里插入图片描述
添加email字段

ALTER TABLE user_5 ADD email VARCHAR(50);

然后再添加默认值

ALTER TABLE user_5 ALTER email SET DEFAULT '852989197@qq.com';

在这里插入图片描述
删除默认值,选中表,选中字段,删除默认值

 ALTER TABLE user_5 ALTER age DROP DEFAULT;

在这里插入图片描述

5、添加删除主键

添加主键ALTER TABLE 表名 ADD PRIMARY KEY(字段)

mysql> CREATE TABLE user_6(
    -> id INT
    -> );

最初是没有主键的

添加主键:ALTER TABLE user_6 ADD PRIMARY KEY(id);

在这里插入图片描述

mysql> CREATE TABLE user_7(
    -> id INT,
    -> card CHAR(18),
    -> username VARCHAR(20) NOT NULL
    -> );

同时添加两个主键
ALTER TABLE user_7 ADD PRIMARY KEY(id, card);
在这里插入图片描述
删除主键

 ALTER TABLE user_6 DROP PRIMARY KEY;

删除复合主键

 ALTER TABLE user_7 DROP PRIMARY KEY;

代码一样,是因为主键只能有一个
添加主键的第二种方式:

ALTER TABLE user_6 ADD CONSTRAINT symbol PRIMARY KEY index_type(id);

建表,id既是主键,又是自增长的

mysql> CREATE TABLE IF NOT EXISTS user_8(
    -> id INT UNSIGNED KEY AUTO_INCREMENT
    -> );

这种情况下直接删除主键会报错
一个表中有且只有一个列是自增长列,而且这一列必须是主键
此时要删除id这一列的话,必须先删除它的自增长属性,用modify

ALTER TABLE user_8 MODIFY id INT UNSIGNED;

这个命令就将id字段的属性更改了,也就是说把自增长的属性去掉了
然后再来删除主键就可以了

ALTER TABLE user_8 DROP PRIMARY KEY;

6、添加删除唯一

ALTER TABLE 表名 ADD [CONSTRAINT [symbol] UNIQUE [INDEX KEY] 索引名称

mysql> CREATE TABLE IF NOT EXISTS game1(
    -> id TINYINT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL,
    -> card CHAR(18) NOT NULL,
    -> test VARCHAR(20) NOT NULL,
    -> test1 CHAR(32) NOT NULL
    -> );

添加唯一字段

ALTER TABLE game1 ADD UNIQUE(username);

在这里插入图片描述
当没有索引名称的时候,系统将字段名称默认为索引名称


ALTER TABLE game1 ADD CONSTRAINT symbol UNIQUE KEY uni_card(card);

索引名称在字段名称之前,字段名称需要加括号card字段前面有了索引名称uni_card

添加复合索引

ALTER TABLE game1 ADD CONSTRAINT symbol UNIQUE INDEX mulUni_test_test1(test, test1);

在这里插入图片描述
形成了复合索引 MUL
在这里插入图片描述
从表定义可以看出复合索引有两个字段,test和test1

删除唯一索引
ALTER TABLE 表名 DROP {INDEX|KEY} 索引

ALTER TABLE game1 DROP INDEX username;
ALTER TABLE game1 DROP INDEX uni_card;
ALTER TABLE game1 DROP INDEX mulUni_test_test1;

在这里插入图片描述
修改存储引擎

ALTER TABLE game1 ENGINE=MyISAM;

修改自增长值

前提条件是一定要有一个字段是自增长的


ALTER TABLE game1 AUTO_INCREMENT=100;

7、删除数据表

表删除的同时,数据也都删除了
DROP TABLE [IF EXISTS] 表名
例如:DROP TABLE user_info;或者DROP TABLE IF EXISTS user_info;
同时删除多张表格
DROP TABLE IF EXISTS user_8,user_7,user_6;
注意:在一开始登录的时候就可以直接打开需要运用的数据库,例如:mysql -uroot -p -D test

8、数据增删改查

(1)插入数据:不指定具体的字段名,需要按照建表时的字段顺序,给每个字段都赋值
INSERT table VALUES(数值)

mysql> CREATE TABLE IF NOT EXISTS finall(
    -> id TINYINT UNSIGNED AUTO_INCREMENT KEY,
    -> username VARCHAR(20) NOT NULL UNIQUE,
    -> password CHAR(32) NOT NULL,
    -> email VARCHAR(50)NOT NULL DEFAULT '852989197@qq.com',
    -> age TINYINT UNSIGNED DEFAULT 18
    -> );

在这里插入图片描述
INSERT finall VALUES(1,‘QUEEN’,123456,0,20);
在这里插入图片描述
(2)可以列出指定的字段,并赋值,字段的顺序要和值的顺序一致,想写默认值的时候,在该字段填写DEFAULT

INSERT finall(username,password) VALUES('A','AAA');

INSERT finall(password,username) VALUES('BBB','B');

在这里插入图片描述
(3)一次插入多条记录
INSERT 表名称 VALUES(值,第二个值…),

mysql> INSERT finall VALUES(4,'C','CCC',DEFAULT,30),
    -> (5,'D','DDD',DEFAULT,20),
    -> (6,'E','EEE',DEFAULT,35) ;

在这里插入图片描述
(4)通过insert set形式插入键值对

INSERT finall SET id=99,username='pysche',password='151265mylove',email=DEFAULT,age=18;

或者只插入我们需要的字段数据

INSERT finall SET username='小星星',age=23,password='little_star';

(5)将查询结果插入到表中
INSERT 表名 SELECT 字段名 FROM 表名
这里必须保证字段和数据类型都符合

INSERT testuser SELECT id,username FROM finall;

在这里插入图片描述
或者只插入其他表中的一个字段

INSERT testuser(username) SELECT username FROM finall;

9、更新数据

UPDATE 表名 SET 字段名=值 [WHERE 条件] [ORDER BY 字段名][LIMIT限制条数]
注意:如果不加where条件,表中所有该字段的数据都会被更新

UPDATE finall SET age=5;

不加条件,表中所有记录都会更新
在这里插入图片描述
当同时改变两个字段的时候,用逗号进行分割

当同时改变两个字段的时候,用逗号进行分割

加上条件,一般来说用唯一标识符字段来作为条件

 UPDATE finall SET password='151265mylove',email='852989197@qq.com',age=18 WHERE id=1;

在这里插入图片描述

UPDATE finall SET age=age-5 WHERE id>3;

删除数据
DELETE FROM 表名 [WHERE 条件] [ORDER BY 字段名][LIMIT限制条数]

DELETE FROM testuser; 

不加条件的话会把表中所有数据都删除

DELETE FROM finall WHERE id=1;

只删除id=1的数据记录

将表中所有记录都删除 DELETE FROM finall;
再次增加值的时候,看一下自增长值的变化

INSERT finall SET username='psyche',age=18,password='151265mylove';

在这里插入图片描述
说明虽然把表中的记录都删除了,但是自增长还是从原来的开始

所以在删除记录之后要改变自增长

彻底清空数据表:TURNCATE 表名

可以清空数据并重置自增长的值

TRUNCATE [TABLE] finall;

注意:彻底清空不能带有where条件
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值