数据表相关操作

数据表由行(row)和列(column)组成,每个数据表至少要有一列,行可以有零行、一行和多行,表名要求唯一,名字最好含义明确,不能有特殊字符。

数据表是数据库最重要的组成部分之一,数据是保持在数据表中的。数据表由行(row)和列(column)组成,每个数据表至少要有一列,行可以有零行、一行和多行,表名要求唯一,名字最好含义明确,不能有特殊字符。

创建数据表
CREATE TABALE IF NOT EXISTS tbl_name( 
    字段名称 字段类型(完整性的约束条件), 
    字段名称 字段类型(完整性的约束条件), 
    ... 
)ENGINE = INNODB(存储引擎) CHARSET=编码方式;

SHOW TABLES; //查看当前数据库下已有数据表
SHOW CREATE TABLE tbl_name; //查看数据表的详细信息
DESC tbl_name; / DESCRIBE tbl_name; / SHOW COLUMNS FROM tbl_name; //查看表结构的三种方式
DROP TABLE IF EXISTS tbl_name; //删除指定的数据表

字段类型

  1. 数值型包括整数型、浮点数和定点型
  2. 字符串类型
  3. 日期时间类型:二进制型

完整性约束条件

  1. UNSIGNED 无符号、没有负数、从0开始
  2. ZEROFILL 零填充,当显示长度不够的时候可以使用前补0的效果填充至指定长度
  3. NOT NULL 非空约束,也就是插入值的时候这个字段必须要给值
  4. DEFAULT 默认值,如果插入记录的时候没有给字段赋值,则使用默认值
  5. PRIMARY KEY 主键,标识记录的唯一性,值不能重复,一个表只能有一个主键,如果这个字段为主键的话,自动禁止为空
  6. UNIQUE KEY 唯一性,一个表中可以有多个字段是唯一索引,同样的值不能重复,但是NULL值除外
  7. AUTO_INCREMENT 自动增加,只能用于数值列,而且配合索引使用
  8. FOREIGH KEY 外键约束

TIPS
表名和字段名称最好放在 ” 中间,防止名字和关键字起冲突产生错误

--用户表 user
CREATE TABLE IF NOT EXISTS user(
    id INT,
    username VARCHAR(20),
    password CHAR(32),
    email VARCHAR(50),
    age TINYINT,
    card CHAR(18),
    tel CHAR(11),
    salary FLOAT(8,2),
    married TINYINT(1),
    addr VARCHAR(100),
    sex ENUM('男','女','保密')
)ENGINE=INNODB CHARSET=UTF8;

--测试整型 INSERT 插入记录
CREATE TABLE IF NOT EXISTS test_int(
    a TINYINT,
    b SMALLINT,
    c MEDIUMINT,
    d INT,
    e BIGINT
);
INSERT test_int(a) VALUES(-128);
如果超出数据的范围,会产生截断现象
INSERT test_int(a) VALUES(-129);
INSERT test_int(a) VALUES(1270);
SELECT * FROM test_int;

--测试无符号 UNSIGNED代表无符号
CREATE TABLE test_unsigned(
	a TINYINT,
	b TINYINT UNSIGNED
);
INSERT test_unsigned(a,b) VALUES(-12,-12);//无法运行
INSERT test_unsigned(a,b) VALUES(0,0);
INSERT test_unsigned(a,b) VALUES(0,256);
SELECT * FROM test_unsigned;

--测试零填充 ZEROFILL代表零填充
CREATE TABLE IF NOT EXISTS test_int1(
	a TINYINT ZEROFILL,
	b SMALLINT ZEROFILL,
	c MEDIUMINT ZEROFILL,
	d INT ZEROFILL,
	e BIGINT ZEROFILL
);
INSERT test_int1(a,b,c,d,e) VALUES(1,2,3,4,5);
SELECT * FROM test_int1;

--测试浮点型
CREATE TABLE test_float(
 	a FLOAT(6,2),--总长度为6,小数点后边有两位
 	b DOUBLE(6,2),
 	c DECIMAL(6,2)
);
INSERT test_float(a,b,c) VALUES(4.143,4.146,4.149);

--测试字符串
CHAR的效率高于VARCHAR,相当于拿空间换时间,VARCHAR拿时间换空间
CHAR默认存储数据的时候,后面会用空格填充到指定长度,而在检索的时候会去掉后面的空格,VARCHAR填充数据时,尾部空格会留下
CHAR占用m个字节,VARCHAR占用长度+1个字节
TEXT列不能有默认值,检索的时候不存在大小写转换