赞
踩
目录
语法如下:
标准的建表(table)语法(列定义之间以英文逗号 , 隔开):
数据表的每行称为一条记录(record),每一列称为一个字段(field):
主键(字段)列:唯一标识某一行的列:
- CREATE TABLE 表名(
- 列名(字段名) 类型,
- 列名(字段名) 类型,
- 列名(字段名) 类型,
- 列名(字段名) 类型,
- 列名(字段名) 类型,
- ) ENGINE = 存储结构;
表名采用大驼峰命名如 >>> Students Subject StudentResult
表名采用小驼峰命名如 >>> studentName subjectName resultDate
MyISAM || InnoDB(默认)
存储列相关信息,描述表结构文件,字段长度等
如果采用共存储模式的,数据信息和索引信息都存储在 ibdata1 中
如果采用分区存储,还会有一个 t.par 文件(用来存储分区信息)
在MySQL中,常用的数据类型有三种:
文本类型、数字类型、日期/时间类型
数据类型 | 描述 |
CHAR(size) | 保存固定长度的字符串(可以包含字母、数字以及特殊字符),在括号中指定字符串的长度。最多 255 个字符 |
VARCHAR(size) | 保存可变长度的字符串(可以包含字母、数字以及特殊字符),在括号中指定字符串的最大长度,最多 255 个字符。如果是 size > 255 则类型会自动转换为 TEXT 类型 |
TEXT | 存放最大长度为 65,535个字符的字符串 |
TINYTEXT | 存放最大长度为 255 个字符的字符串 |
MEDIUMTEXT | 存放最大长度为 16,777,215 个字符的字符串 |
LONGTEXT | 存放最大长度为 4,294,967,295 个字符的字符串 |
BLOB | 用于 BLOBs(Binary Large Objects) 存放最多 65,535 字节的数据 |
MEDIUMBLOB | 用于 BLOBs(Binary Large Objects) 存放最多 16,777,215 字节的数据 |
LONGBLOB | 用于 BLOBs(Binary Large Objects) 存放最多 4,294,967,294 字节的数据 |
ENUM | 枚举类型 |
数据类型 | 描述 |
TINYINT(size) | -128 到 127 常规, 0 到 255 无符号 * 在括号中规定最大位数 |
SMALLINT(size) | -32768 到 32767 常规, 0 到 65535 无符号 * 在括号中规定最大位数 |
MEDIUMINT(size) | -8388608 到 8388607 普通, 0 到 16777215 无符号 * 在括号中规定最大位数 |
INT(size) | -2147483648 到 2147483647 常规,0到 4294967295 无 符号*。在括号中规定最大位数 |
BIGINT(size) | -9223372036854775808 到 9223372036854775807 常规 |
FLOAT(size,d) | 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数 |
DOUBLE(size,d) | 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数 |
DECIMAL(size,d) | 作为字符串存储的 DOUBLE 类型,允许固定的小数点 |
数据类型 | 描述 |
DATE() | 日期。格式:YYYY-MM-DD 取值范围 '1000-01-01' <<<>>> '9999-12-31' |
DATETIME() | 日期和时间的组合。格式: YYYY-MM-DD HH:MM:SS 注释:支持的范围是'1000-01-01 00:00:00' <<<>>> '9999-12- 31 23:59:59' |
TIMESTAMP() | 时间戳。 TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式: YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC |
TIME() | 时间。格式: HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59' |
YEAR() | 2 位或 4 位格式的年。 注释: 4 位格式所允许的值: 1901 到 2155。 2 位格式所允许 的值: 70 到69,表示从 1970 到 2069 |
- 语法如下:
- SHOW TABLES [FROM 数据库名] [LIKE wild];
SHOW COLUMNS FROM 表名
- 语法如下:
- DROP TABLE [IF EXISTS] 表名
示例如下:
- #创建学生表
- CREATE TABLE Students(
- studentNo INT(5),
- studentName VARCHAR(50),
- studentBirth DATE,
- studentAddress VARCHAR(100),
- studentTel VARCHAR(11),
- studentEmail VARCHAR(50),
- ) ENGINE = InnoDB;
SHOW COLUMNS FROM Students;
DROP TABLE [IF EXISTS] Student;
- ALTER TABLE 表名 MODIFY 列名 列类型;
- 示例:
- ALTER TABLE Students MODIFY studentEmail TEXT;
- ALTER TABLE 表名 ADD 列名 列类型;
- 示例:
- ALTER TABLE Students ADD studentGender CHAR(2);
- ALTER TABLE 表名 DROP 列名;
- 示例:
- ALTER TABLE Students DROP studentGender;
- 注意:
- 在删除时,应该注意数据的完整性
- ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;
- 示例:
- ALTER TABLE Students CHANGE studentEmail studentEma VARCHAR(50);
- ALTER TABLE 表名 RENAME 新表名;
-
- ALTER TABEL 表名 TO 新表名;
方式一:
- 在 CREATE TABLE 语句的末尾加入 LIKE 源表;
- 示例:
- CREATE TABLE Students1 LIKE Students;
方式二:
- 在 CREATE TABLE 语句末尾添加 SELECT 关键字;
- 示例:
- CREATE TABLE Students2 SELECT * FROM Students;
方式三:
- 如果已经有了一张表(结构一定要和源表一样)
- 语法:
- INSERT INTO 表名 SELECT * FROM 源表;
由 information_schema 数据库负责维护
tables | 存放数据库里所有的数据表、以及每个表所在数据库 |
schemata | 存放数据库里所有的数据库信息 |
views | 存放数据库里所有的视图信息 |
columns | 存放数据库里所有的列信息 |
triggers | 存放数据库里所有的触发器 |
routines | 存放数据库里所有存储过程和函数 |
key_column_usage | 存放数据库所有的主外键 |
table_constraints | 存放数据库全部约束 |
statistics | 存放了数据表的索引 |
是在表上强制执行的数据校验规则,约束主要用于保护数据库的完整性。当表中的数据有相互依赖性时,可以保护相关的数据不被删除
大部分数据库支持以下完整性约束:
非空约束 | NOT NULL |
唯一性约束 | UNIQUE KEY |
主键约束(非空 + 唯一) | PRIMARY KEY |
外键约束 | FOREIGN KEY |
检查约束 | CHECK 检查语法 |
默认值约束 | DEFAULT |
...... | ...... |
1、建表时期加入,直接符在声明的列后
2、建表时期加入,所有列声明完成后,单独去重新声明列的约束性
3、建表后加入,语法参考修改列类型语法完成约束的添加
约束作为数据库对象,存放在系统表中,也有自己的名字
1、在建表的同时创建
2、建表后创建(修改表)
可定义列级或表级约束
有单列约束和多列约束
方式一 | 列级约束:在定义列的同时定义约束 语法: 列定义 约束类型 |
方式二 | 表级约束:在定义了所有列之后定义的约束 语法: 列定义 [CONSTRAINT 约束名] 约束类型(列名) |
推荐采用:表名_列名_约束类型简介
方式三 | 约束可以在创建表时就定义,也可以在创建完成后再添加 语法: ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型(要约束的列名) |
列级约束,只能使用列级约束语法定义
确保字段值不允许为空
只能在字段级定义
- CREATE TABLE Students(
- studentNo INT PRIMARY KEY AUTO_INCREMENT,
- studentName VARCHAR(50) NOT NULL
- );
唯一性约束条件确保所在的字段或者字段组合不出现重复值
唯一性约束条件的字段允许出现多个NULL
同一张表内可建多个唯一约束
唯一约束可由多列组合而成
建唯一约束时MySQL会为之建立对应的索引。
如果不给唯一约束起名,该唯一约束默认与列名相同
- CREATE TABLE Students(
- studentNo INT PRIMARY KEY AUTO_INCREMENT,
- studentName VARCHAR(18) UNIQUE NOT NULL
- );
主键从功能上看相当于非空且唯一
一个表中只允许一个主键
主键是表中唯一确定一行数据的字段
删除表的约束
自动增长和默认值
存储引擎
主键字段可以是单字段或者是多字段的组合
当建立主键约束时,MySQL为主键创建对应的索引
主键约束名总为PRIMARY
- CREATE TABLE tb_student(
- studentNo INT PRIMARY KEY AUTO_INCREMENT,
- studentName VARCHAR(18)
- );
外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
外键确保了相关的两个字段的两个关系:
子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)。
当主表的记录被子表参照时,主表记录不允许被删除。
外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录
- 格式:
- FOREIGN KEY (外键列名)REFERENCES 主表(参照列)
检查约束在8.0之前,MySQL默认但不会强制的遵循check约束(写不报错,但是不生效,需要通触发器完成)
8之后就开始正式支持这个约束了
- create table t3(
- id int,
- age int check(age > 18),
- gender char(1) check(gender in ('M','F'))
- );
auto_increment :自动增长
为新的行产生唯一的标识
一个表只能有一个 auto_increment,且该属性必须为主键的一部分。auto_increment的属性可以是任何整数类型
default : 默认值
- # 默认值
- 可以使用default关键字设置每一个字段的默认值。
- -- 创建一张user表
- CREATE TABLE User(
- id INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
- name VARCHAR(225) COMMENT '姓名',
- sex TINYINT(1) DEFAULT 1 COMMENT '性别 1男 0女',
- PRIMARY KEY (id)
- ) ENGINE=INNODB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。