MySQL数据库02(数据类型 字段的约束及属性 表的DML语句 )

一、MySQL数据类型--数值类型

类型说明取值范围存储需求
TINYINT非常小的数据

有符值:-2(7次方)~ 2(7次方)-1 

 无符号值:0 ~ 2(8次方)-1

1字节
SMALLINT较小的数据有符值:  -2(15次方) ~ 2(15次方)-1  
无符号值:  0 ~ 2(16次方)-1 
2字节
MEDIUMINT中等大小的数据有符值:  -2(23次方) ~ 2(23次方)-1  
无符号值:  0 ~ 2(24次方)-1 
3字节
INT标准整数有符值: -2(31次方) ~ 2(31次方)-1  
无符号值:0 ~ 2(32次方)-1  
4字节
BIGINT较大的整数有符值: -2(63次方)~2(63次方)-1
无符号值:0 ~2(64次方)-1   
8字节
FLOAT单精度浮点数±1.1754351e -38
4字节
DOUBLE双精度浮点数±2.2250738585072014e -308
8字节
DECIMAL
字符串形式的浮点数Decimal(M,D)
M+2个字节

UNSIGNED属性:标识为无符号数

ZEROFILL属性:宽度(位数)不足以0填充

例:

 
CREATE DATABASE python7;
SHOW DATABASES;
USE python7;
#创建一个名称为tb_type的表 这一列名称为为sid 存储数据类型为INT字节宽度为4  ZEROFILL:默认补齐不足指定位数用0填充如果超出则填写实际宽度
CREATE TABLE `tb_type`(
	`sid` INT(4) ZEROFILL);
#给tb_type 中添加内容
INSERT INTO `tb_type`
	VALUE(12),(1234),(123456);

执行命令得


二、字符串、日期类型

字符串类型说明长度
CHAR[(M)]定长字符串M字节
VARCHAR[(M)]可变字符串可变长度
TINY TEXT微型文本串0~2(8次方)–1字节
TEXT文本串0~2(16次方)–1字节
日期类型格式取值范围
DATEYYYY-MM-DD  日期格式1000-01-01~ 9999-12-31
DATE TIMEYY-MM-DD hh:mm:ss:1000-01-01 00:00:00 ~9999-12-31 23:59:59
TIMEhh:mm:ss-835:59:59 ~ 838:59:59
TIMES TAMPYYYYMMDDHHMMSS1970年某时刻~2038年某时刻,精度为1秒
TEARYYYY格式的年份1901-2155

若某日期字段默认值为当前日期,一般设置为TIMESTAMP类型

三、字段的约束及属性

约束是确保一个表数据的唯一性和完整性

主键每行的唯一标识符,仅仅通过它就能准确定位到一行,其中主键列在整个表中不能有重复,必须包含唯一的值(不能为NULL)

外键既能确保数据完整性,也能表现表之间的关系。添加了外键之后,插入引用表的记录要么必须被引用表中被引用列的某条记录匹配,要么外键列的值必须设置为NULL

  外键和主键不一样,每个表中的外键数目不限制唯一性。在每个表中,每一有-~253个外键。唯一的限制是一个列只能引用一个外键。一个列可以被多个外键引用。

如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的。

名称                          代 码                                                             说明
无符号UNSIGNED无符号
非空约束 NOT NULL字段不允许为空
默认约束DEFAULT赋予某字段默认值
唯一约束UNIQUE KEY(UK)

设置字段的值是唯一的

允许为空,但只能有一个空值

主键约束PRIMARY KEY(PK)

设置该字段为表的主键

可谓一表示该表记录 

外键约束FOREIGN KEY(FK)

用于在两表之间建立关系,

需要指定引用主表的哪一字段 

自动增长AUTO_INCREMENT

设置该列表自增字段

默认每条自增1 

通常用于设置主键 

语法:

CREATE TABLE [IF NOT EXISTS]表名(

字段1 数据类型[字段属性|约束][索引][注释],

...

字段n 数据类型[字段属性|约束][索引][注释]

)[表类型][表字符集][注释];

(注:多字段使用逗号隔开   保留字用撇号括起来  单行注释:#....   多行注释/#....#/)

创建学生表

 
CREATE TABLE `student`(
  `studentNo` INT(4) PRIMARY KEY,`name` CHAR(10),
...);

主键

 
CREATE TABLE student (
  `studentNo` INT(4) PARIMARY KEY,
...);

 注释

 
CREATE TABLE text(
  `id` INT(11) UNSIGNED COMMENT'编号'#无符号
)COMMENT='测试表';'

设置字符集编码

 
CREATE TABLE[IF NOT EXISTS] 表名(
 #省略代码
)CHARSET=字符集名;

例:

在python7数据中建一个学生表


代码如下:

 
CREATE TABLE student(
	studentNo INT(4) NOT NULL PRIMARY KEY COMMENT'学号',
	loginPwd VARCHAR(20) NOT NULL COMMENT'密码',
	studentName VARCHAR(50) NOT NULL COMMENT'姓名',
	sex CHAR(2) NOT NULL DEFAULT'男' COMMENT'性别',
	gradeID INT(4) UNSIGNED COMMENT'年级编号',
	phone VARCHAR(50) COMMENT'电话',
	address VARCHAR(255) DEFAULT'地址不详' COMMENT'地址',
	bornDate DATETIME COMMENT'出生日期',
	email VARCHAR(50) COMMENT'邮件账号',
	identityCard VARCHAR(18) UNIQUE KEY COMMENT'身份证号'
)COMMENT='学生表'

执行命令得



四、1.<1>查看表是否存在

 
USE python7;
SHOW tables;

执行命令得


<2>查看表定义

语法:DESCRIBE 表名;  或者DESC 表名;

 
DESC student

执行命令得


(避免DOS窗口乱码,可执行SET NAMES jbk;)


2.删除表

语法: DROP TABLE[IF EXISTS] 表名;

 
USE python7;
DROP TABLE IF EXISTS `student`;#if语句可以不写 但是所删除内容必须存在读取的表中否则报错

3.修改表

<1>修改表名

语法:ALTER TABLE 旧表名 RENAME[TO] 新表名;

<2>添加字段

语法:ALTER TABLE 表名 ADD 字段名 数据类型 [属性];

<3>修改字段

语法:ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型[属性];

例:

 
#修改表名
ALTER TABLE student RENAME TO student1;
#添加字段
ALTER TABLE student1 ADD nikeName VARCHAR(30) NOT NULL;
#修改字段
ALTER TABLE student1 CHANGE nikeName haha INT(5);

执行命令得


<4>删除字段

语法:ALTER TABLE 表名 DROP 字段名

 
#删除字段
ALTER TABLE student1 DROP haha;

五、1.添加主键

语法: 

ALTER TABLE 表名 ADD CONSTRAINT 主键名

PRIMARY KEY 表名(主键字段);

 
CREATE TABLE grade(
	gradeID INT(4) UNSIGNED,
	gradeName VARCHAR (30) NOT NULL
)
ALTER TABLE grade ADD CONSTRAINT pk_gradeid
PRIMARY KEY grade(gradeID)

执行命令得


2.添加外键

语法: 

ALTER TABLE 表名 ADD CONSTRAINT 外键名

FOREIGN KEY (外键字段)

REFERENCES 关联表名(关联字段);

代码如下

 
ALTER TABLE student1 ADD CONSTRAINT fk_gradeid
FOREIGN KEY(gradeID)
REFERENCES grade(gradeID)

执行命令得


3.删除外键

注:删除表时先删除子表再删除主表

删除不能只删除外键 否则还会存在,紧接着必须删除索引

 
 #删除外键  删除表时 先删除子表 再删除主表
ALTER TABLE student3 DROP FOREIGN KEY fk_gradeid #删除不能只删除外键 否则还存在
ALTER TABLE student3 DROP INDEX fk_gradeid#还必须删除索引

练习

需求说明
 result表需要添加的内容
主键约束:学号、课程编号和日期构成组合主键

外键约束:主表student和从表result通过studentNo字段建立主外键关联

 
CREATE TABLE result(
	studentNo INT(4) NOT NULL COMMENT'学号',
	subjectNo INT(4) NOT NULL COMMENT'课程编号',
	examDate DATETIME NOT NULL COMMENT'考试日期',
	studentResult INT(4) NOT NULL COMMENT'考试成绩'
)
#组合主键
ALTER TABLE result ADD CONSTRAINT pk_st_su_date
PRIMARY KEY result(studentNo,subjectNo,examDate)
#外键约束
ALTER TABLE student1 ADD CONSTRAINT fk_st_su_date
FOREIGN KEY(studentNo)
REFERENCES result(studentNo)

3.MySQL系统帮助

 
HELP contents;
HELP DATA TYPES;
HELP INT;

在DOS命令之执行得





在student表和result表中添加一些学生信息

student表


result表


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章