1_MySQL基础之数据类型

注:App端的代码块区可能会因为内容过多而显示不全,请双击代码块区查看内容!

-- 1*****************************************************************************************************

-- 创建慕课网数据库 imooc
CREATE DATABASE IF NOT EXISTS imooc DEFAULT CHARACTER SET 'UTF8';
-- 打开数据库
USE imooc;
-- 用户表 user
CREATE TABLE IF NOT EXISTS imooc_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;

-- 2*****************************************************************************************************

-- INSERT [INTO] tbl_name(id,username,...) VALUES(1,'KING',...);
-- 向imooc_user表中插入一条数据
INSERT INTO imooc_user(id,username,password,email,age,card,tel,salary,married,addr,sex)
VALUES(1,'KING','123456','[email protected]',22,'123456789123','12345678911',888888.88,0,'北京','男');
-- 查询表中所有字段 SELECT * FROM tbl_name;
SELECT * FROM imooc_user;

-- 3*****************************************************************************************************

--测试整型
CREATE TABLE 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(127);
INSERT test_int(a) VALUES(128);--超出范围,报错


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);-- 超出范围,报错,b的最大值为255

-- 4*****************************************************************************************************

-- 测试零填充,ZEROFILL
CREATE TABLE test_int1(
	a tinyint ZEROFILL,
	b smallint ZEROFILL,
	c mediumint ZEROFILL,
	d int ZEROFILL,
	e bigint ZEROFILL
);

INSERT INTO test_int1(a,b,c,d,e)VALUES(1,1,1,1,1);

CREATE TABLE test_int2(
	a tinyint(2),
	b smallint(2)
);

INSERT test_int2(a,b) VALUES(123,45678);-- 超出范围,报错

-- 5*****************************************************************************************************

-- 测试浮点型
CREATE TABLE test_float(
	a FLOAT(6,2),
	b DOUBLE(6,2),
	c DECIMAL(6,2)
);
INSERT test_float(a,b,c)VALUES(4.142,4.146,4.149);

CREATE TABLE test_float1(
	a FLOAT,
	b DOUBLE,
	c DECIMAL-- 会进行四舍五入
);
INSERT test_float1(a,b,c)VALUES(4.142,4.146,4.149);-- c的值为4,若c的值为4.649,则会对c进行四舍五入,c的值为5

-- 6*****************************************************************************************************

-- 测试char 和varchar
CREATE TABLE test_str(
	a CHAR(5),
	B VARCHAR(5)
);

INSERT test_str(a,b) VALUES('','');
INSERT test_str(a,b) VALUES('a','a');
INSERT test_str(a,b) VALUES('ab','ab');
INSERT test_str(a,b) VALUES('abc','abc');
INSERT test_str(a,b) VALUES('abcd','abcd');
INSERT test_str(a,b) VALUES('abcde','abcde');
INSERT test_str(a,b) VALUES('abcdef','abcdef');-- 插入失败,原因是字符长度超出范围
INSERT test_str(a,b) VALUES(' 123 ',' 123 ');-- char类型字符后面的空格会去掉,而varchar会保留该空格

SELECT CONCAT('*',a,'*'),CONCAT('*',b,'*') FROM test_str;

-- 测试TEXT不能有默认值
CREATE TABLE test_str1(
	content TEXT DEFAULT 'This is a Text'
);-- 报错

-- 测试ENUM
CREATE TABLE test_enum(
	sex ENUM('男','女','保密')
);
INSERT test_enum(sex) VALUES('男');
INSERT test_enum(sex) VALUES(NULL);
INSERT test_enum(sex) VALUES(1);-- 插入'男',结论:编号从1开始

-- 测试ENUM中的空格
CREATE TABLE test_enum1(
	sex ENUM('男   ','女','保密')
);
INSERT test_enum1(sex) VALUES('男');
-- 结论:枚举类型会自动过滤掉空格

-- 测试SET	应用:在给用户赋权限时可用
CREATE TABLE test_set(
	a SET('A','B','C','D','E','F')
);

INSERT test_set(a) VALUES('A');
INSERT test_set(a) VALUES('C');
INSERT test_set(a) VALUES('C,D,E');
INSERT test_set(a) VALUES('C,F,A');

INSERT test_set(a) VALUES('C,F,A,H');-- 报错
INSERT test_set(a) VALUES(2);-- 输出B

-- 7*****************************************************************************************************

-- HH:MM:SS [D HH:MM:SS] D表示天数 0~34
-- 测试TIME类型
CREATE TABLE test_time(
	a TIME
);
INSERT test_time(a) VALUES('12:23:45');
INSERT test_time(a) VALUES('2 12:23:45');--输出602345
INSERT test_time(a) VALUES('22:22');--输出22:22:00
INSERT test_time(a) VALUES('22');-- 输出00:00:22
INSERT test_time(a) VALUES('2 22');-- 70:00:00
INSERT test_time(a) VALUES('121212');--相当于HHMMSS;c输出12:12:12
INSERT test_time(a) VALUES('0');--输出0
INSERT test_time(a) VALUES(0);-- 输出0
INSERT test_time(a) VALUES('787878');--报错,提示不符合规范

INSERT test_time(a) VALUES(NOW());-- 插入当前时间
INSERT test_time(a) VALUES(CURRENT_TIME);-- 插入当前时间
-- 补充:得到当前的时间
SELECT CURRENT_TIME;
SELECT CURTIME();

--测试DATE类型 YY-MM-DD 或 YYYYMMDD
CREATE TABLE test_date(
	a DATE
);
INSERT test_date VALUES('2017-03-04');
INSERT test_date VALUES('2017-2-13');
INSERT test_date VALUES('4007-03-23');
INSERT test_date VALUES('40071212');
INSERT test_date VALUES('4007@12@12');
INSERT test_date VALUES('4007#12#13');
INSERT test_date VALUES('4009.8.14');

-- YY-MM-DD YYMMDD
-- YY:70~90 转换成1970~1999	YY:00~69 2000~2069
INSERT test_date(a) VALUES('780902');
INSERT test_date(a) VALUES('650902');
INSERT test_date(a) VALUES(NOW());
INSERT test_date(a) VALUES(CURRENT_DATE);

--测试DATETIME
CREATE TABLE test_datetime(
a DATETIME
);
INSERT test_datetime(a) VALUES('1004-09-12 13:23:56');
INSERT test_datetime(a) VALUES('720303121212');

--测试TIMESTAMP
CREATE TABLE test_timestamp(
	a TIMESTAMP
);
INSERT test_timestamp(a) VALUES('1978-10-23 12:12:12');
--插入CURRENT_IIMESTAMP、NULL、什么也不写,均得到当前系统日期和时间
INSERT test_timestamp VALUES(CURRENT_TIMESTAMP);
INSERT test_timestamp VALUES(NULL);
INSERT test_timestamp VALUES();

--测试YEAR 范围1901~2155
CREATE TABLE test_year(
	a YEAR
);
INSERT test_year(a) VALUES(1901);
INSERT test_year(a) VALUES(2155);

--00~69 2000~2069 70~99 1970~1999
-- 0 插入的结果是0000
-- '0' 插入的结果是2000

-- 8*****************************************************************************************************

--测试主键	注意:表中只能有一个字段是主键,但可以有复合主键
CREATE TABLE test_primary_key(
	id INT PRIMARY KEY,
	username VARCHAR(20)
);
INSERT test_primary_key(id,username)VALUES(1,'KING');
INSERT test_primary_key(id,username)VALUES(1,'KING123');-- 报错
INSERT test_primary_key(id,username)VALUES('QUEEN');-- 报错

--也可以这样写
CREATE TABLE test_primary_key1(
	id INT UNSIGNED KEY,
	username VARCHAR(20)
);

CREATE TABLE test_primary_key2(
	id INT UNSIGNED,
	username VARCHAR(20),
	PRIMARY KEY(id)
);

--复合主键
CREATE TABLE test_primary_key3(
	id INT UNSIGNED,
	courseId VARCHAR(20),
	username VARCHAR(20),
	email varchar(50),
	PRIMARY KEY(id,courseId)
);
-- 复合主键是两个整体构成的,只要整体不相同,就不会报错
-- 1-a
INSERT test_primary_key3()VALUES(1,'a','king','[email protected]');
INSERT test_primary_key3()VALUES(1,'b','king','[email protected]');
INSERT test_primary_key3()VALUES(2,'a','king','[email protected]');
INSERT test_primary_key3()VALUES(2,'b','king','[email protected]');

--测试AUTO_INCREMENT
--有AUTO_INCREMENT必须有KEY
CREATE TABLE test_auto_increment(
	id INT UNSIGNED KEY AUTO_INCREMENT,
	username VARCHAR(20)
);

INSERT test_auto_increment(username)VALUES('A');
INSERT test_auto_increment(username)VALUES('B');
INSERT test_auto_increment(username)VALUES('C');
INSERT test_auto_increment(id,username)VALUES(NULL,'E');
INSERT test_auto_increment(id,username)VALUES(DEFAULT,'F');

INSERT test_auto_increment(id,username)VALUES(15,'G');--下次自动增长变为16

-- 9*****************************************************************************************************

CREATE TABLE test_not_null(
	a varchar(20),
	b varchar(20) not null
);

INSERT test_not_null(a,b)VALUES('','');
INSERT test_not_null(a,b)VALUES(NULL,NULL);--报错

--测试默认值
CREATE TABLE test_default(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	username VARCHAR(20) NOT NULL,
	age TINYINT UNSIGNED DEFAULT 18,
	email VARCHAR(50) NOT NULL DEFAULT '[email protected]'-- NOT NULL一般与DEFAULT搭配
);

INSERT test_default(username) VALUES('A');
INSERT test_default(username,age,email) VALUES('B',30,'[email protected]');
INSERT test_default(username,age,email) VALUES('C',NULL,'[email protected]');
INSERT test_default(username,age,email) VALUES('D',NULL,NULL);--报错,email不能为null
INSERT test_default(username,age,email) VALUES('E',NUll,DEFAULT);
INSERT test_default(username,age,email) VALUES('F',NUll,' ');

--枚举类型与DEFAULT搭配使用
CREATE TABLE test_default1(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	sex ENUM('a','b','c') NOT NULL DEFAULT 'a'
);

INSERT test_default1(sex) VALUES(DEFAULT);
INSERT test_default1(id) VALUES(2);

-- 测试UNIQUE KEY
CREATE TABLE test_unique(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	username VARCHAR(20) NOT NULL UNIQUE KEY,
	email VARCHAR(50) UNIQUE,
	card CHAR(18) UNIQUE
);

INSERT test_unique(username,email,card) VALUES('A','[email protected]','1');
INSERT test_unique(username,email,card) VALUES('A','[email protected]','11');-- 报错
INSERT test_unique(username,email,card) VALUES('B',NULL,NULL);
INSERT test_unique(username,email,card) VALUES('C',NULL,NULL);

-- 10*****************************************************************************************************
--用户表imooc_user1
CREATE TABLE IF NOT EXISTS imooc_user1(
id INT UNSIGNED AUTO_INCREMENT KEY COMMENT '用户编号',
username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',
password CHAR(32) NOT NULL COMMENT '密码',
email VARCHAR(50) NOT NULL UNIQUE COMMENT '邮箱',
age TINYINT UNSIGNED NOT NULL DEFAULT 18 COMMENT '年龄',
sex ENUM('男','女','保密') NOT NULL DEFAULT '保密' COMMENT '性别',
tel CHAR(11) NOT NULL UNIQUE COMMENT '电话',
addr VARCHAR(50) NOT NULL DEFAULT '北京' COMMENT '地址',
card CHAR(18) NOT NULL UNIQUE COMMENT '身份证号',
married TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0代表未婚,1代表已婚',
salary FLOAT(8,2) NOT NULL DEFAULT 0 COMMENT '薪水'
)ENGINE=INNODB CHARSET=UTF8;

-- 复习:查看创建的表的结构
DESC imooc_user1;
SHOW CREATE TABLE imooc_user1;
SHOW CREATE TABLE imooc_user1\G
















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