python学习26

MySQL  01

数值类型1

类型说明取值范围存储需求
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^ -384字节
DOUBLE双精度浮点数±2.2250738585072014e^ -3088字节
DECIMAL字符串形式的浮点数DECIMAL(M,D)M+2字节 
unsigned属性:标识为无符号数

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

若某数值字段指定了zerofill属性,将自动添加unsigned属性。如下图:


字符串类型:

字符串类型说明长度
char[(M)]定长字符串M字节
varchar[(M)]可变字符串可变长度
tinyext微型文本串0~2^8 -1字节
text文本串0~2^16 -1字节

日期类型:

日期类型格式取值范围
date

YYYY-MM-DD,日期格式

1000-01-01~ 9999-12-31

datetime

YY-MM-DD hh:mm:ss:

1000-01-01 000000 ~9999-12-31 235959

time

hh:mm:ss:

-835:59:59 ~838:59:59

timestamp

YYYYMMDDHHMMSS

1970年某时刻~2038年某时刻,精度为1

year

YYYY格式的年份

1901~2155

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

字段的约束及属性:

名称关键字说明
非空约束not null

字段不允许为空

默认约束default赋予某字段默认值
唯一约束unique key(uk)设置字段的值是唯一的,允许为空,但只能有一个空值
主键约束primary key(pk)设置该字段为表的主键,可唯一标识该表记录
外键约束foreign key(fk)用于在两表之间建立关系,需要指定引用主表的哪一字段
自动增长auto_increment设置该表为自增长字段,默认每条自增1,通常用于设置主键

创建列表:create table [if not exists] 表名(#省略代码)

注释:comment (字段内不加等号,括号外需加等号,如:

create table test(
id int(4) not null comment'编号'
)comment='测试表'

设置字符集编码:charset=字符集名

练习:首先打开MySQL,创建一个名为myschool的数据库,然后在库中创建如下一个列表:


代码如下:

CREATE DATABASE myschool;  #创建一个myschool数据库
USE myschool;
#创建学生列表
CREATE TABLE student_1(
studentNo INT(4) NOT NULL COMMENT'学号'PRIMARY KEY,
loginPwd VARCHAR(20) NOT NULL COMMENT'密码',
studentName VARCHAR(50) NOT NULL COMMENT'学生姓名',
sex CHAR(2) DEFAULT '男' NOT NULL COMMENT'性别',
gradeID INT(4) UNSIGNED COMMENT'年级编号',
phone VARCHAR(50) COMMENT'联系电话',
address VARCHAR(255) DEFAULT'地址不详' COMMENT'地址',
bornDate DATETIME COMMENT'出生时间',
email VARCHAR(18) COMMENT'邮件账号',
identityCard VARCHAR(18) NOT NULL UNIQUE KEY COMMENT'身份证号'
)CHARSET=utf8 COMMENT='学生表'

查看表是否存在:

use myschool;

show tables;


查看表定义:describe 表名 或者  desc 表名

为了避免dos窗口乱码 ,可执行set names gbk;


删除表:drop table 表名;

在删除之前,也可以使用if exists 语句验证表是否存在。

修改表名:later table 旧表名 rename 新表名;

添加字段:later table 表名 add 字段名 数据类型 [属性];

修改字段:later table 表名 change 原字段名 新字段名 数据类型 [属性];

删除字段:later table 表名 drop 字段名;

例如:

#首先我们创建一个列表demo01
CREATE TABLE demo01(
id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(8)NOT NULL
);
#修改表名为demo02
ALTER TABLE demo01 RENAME demo02;
#添加字段   添加一个字段名为PASSWORD 数据类型为varchar 不能为空的字段
ALTER TABLE demo02 ADD PASSWORD VARCHAR(32) NOT NULL;
#修改字段   将demo02表中原来的NAME字段修改为字段名为username 数据类型为char(10) 不能为空的字段
ALTER TABLE demo02 CHANGE NAME username CHAR(10) NOT NULL;
#删除字段  将表demo02 中字段名为PASSWORD的字段删除
ALTER TABLE demo02 DROP PASSWORD;

添加主键:

alter table 表名 add constraint 主键名

primary key 表名 (主键字段);

#创建一个表grade_1
CREATE TABLE grade_1(
gradeID INT(4) UNSIGNED,
gradeName VARCHAR(30) NOT NULL
);
#添加主键
ALTER TABLE grade_1 ADD CONSTRAINT pk_gradeid
PRIMARY KEY grade_1(gradeID)

上述代码将grade_1表中的gradeID字段添加为了主键

添加外键:

alter table 主表名 add constraint 外键名

foreign key (外键字段)

references 关联表名/从表名(关联字段);

例:创建一个result表:


        result表需要添加的内容:

        主键约束:学号、课程编号和日期构成组合主键

        键约束:主表student_1和从表result通过studentNo字段建立主外键关联
#成绩表
CREATE TABLE result(
studentNo INT(4) NOT NULL COMMENT'学号',
subjectNo INT(4) NOT NULL COMMENT'课程编号',
examDate DATETIME NOT NULL,
studentResult INT(4) NOT NULL COMMENT'考试成绩'
)COMMENT='成绩表';

#主键约束:学号、课程编号和日期构成组合主键
ALTER TABLE result ADD CONSTRAINT pk_ent_ect_data
PRIMARY KEY result(studentNo,subjectNo,examDate)

#外键约束:主表student_1和从表result通过studentNo字段建立主外键关联
ALTER TABLE student_1 ADD CONSTRAINT fk_r_s
FOREIGN KEY(studentNo)
REFERENCES result(studentNo)

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页