MySQL表定义与完整性约束机制



SHOW ENGINES;  -- 显示默认的存储引擎;

CREATE DATABASE test1 CHARACTER SET utf8 COLLATE utf8_bin;


USE test1;


SHOW VARIABLES LIKE 'character_set_database';


SHOW VARIABLES LIKE 'collation_database';


-- DROP DATABASE test1;


-- =====================================================
-- 下面这些语句用于练习和熟悉各种类型字段的类型表示和数据表示

CREATE TABLE 测试表 (
  id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  分数 DECIMAL(4,1) DEFAULT NULL,
  实验数据 DOUBLE DEFAULT NULL,
  时间戳 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  二进制 BINARY(2) DEFAULT NULL,
  col_blob BLOB,
  长文本 TINYTEXT COLLATE utf8_bin,
  年份 YEAR(4) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=INNODB 

-- 仅说明问题,实际应用时,列名不要用汉字


-- 当字段类型为timestamp时,如果默认值取CURRENT_TIMESTAMP,
-- 则在insert一条记录时,字段值自动设置为系统当前时间,
-- 如果勾选了 ON UPDATE CURRENT_TIMESTAMP ,
-- 则字段值会随着update命令进行实时更新,即当这行的其他字段发生变化update时,字段值自动更新为系统最新时间。


-- -------------------------
INSERT INTO 测试表(分数,实验数据,时间戳,二进制,长文本,年份) 
VALUES(95.5,1.23e18,NULL,'AF','你好',2019);


INSERT INTO 测试表(分数,实验数据,时间戳,二进制,长文本,年份) 
VALUES(95.5,1.23e18,NULL,'AF','你好',2019);

INSERT  INTO 测试表(id,分数,实验数据,时间戳,二进制, col_blob,长文本,年份) 
VALUES (9,'95.5',1.23e18,'2018-09-15 23:51:45','AF','你好','你好你好',0000);


SELECT * FROM 测试表;


-- int(1)和int(11)和int的区别:

CREATE TABLE t( X INT(1) ZEROFILL, Y INT(11) ZEROFILL,z INT);

INSERT INTO  t VALUES(12345678901,12345678901,12345678901);

INSERT INTO  t VALUES(1234567890,1234567890,1234567890);

INSERT INTO  t VALUES(123456789,123456789,123456789);

SELECT * FROM t;


-- 自增列、整型、精确小数、浮点数
CREATE TABLE t1 (
 序号 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,  -- 自增
 分数 DECIMAL(4,1),
 实验数据 DOUBLE ,
 PRIMARY KEY (序号)
); 

INSERT INTO t1(分数,实验数据) VALUES(1234.1,2e17),(123.4,6e-9);

DELETE FROM t1 WHERE 分数=123.4;

INSERT INTO t1(分数,实验数据) VALUES(99.5,2.3e10);

SELECT * FROM t1;


-- 日期、时间戳类型
CREATE TABLE t2 (  
  年份 YEAR,
  日期 DATE,
  时间戳 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP   
);

INSERT INTO t2(年份,日期) VALUES(1995,1999-2-20);

INSERT INTO t2(年份,日期) VALUES('1997','1999-2-20');

INSERT INTO t2(年份,日期) VALUES(2005,'1999-2-20');

SELECT * FROM T2;

UPDATE t2 SET 年份=1990 WHERE 年份=1995;

SELECT * FROM T2;



-- 字符类型

CREATE TABLE t3 (  
定长串 CHAR(2),
变长串 VARCHAR(2),
长文本 TEXT,
二进制长文本 BLOB
);

INSERT INTO t3 VALUES('ab','AB','qqqqqqqqqqqqqq','qqqqqqqqqqqqqq');

INSERT INTO t3 VALUES('abc','ABC','qqqqqqqqqqqqqq','qqqqqqqqqqqqqq');

INSERT INTO t3 VALUES('张三','李四',NULL,NULL);

INSERT INTO t3 VALUES('张三丰','李四海',NULL,NULL);

SELECT * FROM T3;



-- ENUM和SET类型:


CREATE TABLE setenum (
  id INT(11) NOT NULL AUTO_INCREMENT,
  settype SET('we','周','李','孙','钱','赵') DEFAULT NULL,
  enumtype ENUM('ZZZ','南海','长江','黄河'),
  PRIMARY KEY (id)
) ENGINE=INNODB AUTO_INCREMENT=5;

INSERT INTO setenum VALUES ('1', 'we,周,钱', '南海');

INSERT INTO setenum VALUES ('2', '钱,赵', '黄河');

INSERT INTO setenum VALUES ('3', 'we,赵', '南海');

INSERT INTO setenum VALUES ('4', '李,孙,钱', '长江');

SELECT * FROM setenum;


-- 二进制类型

CREATE TABLE t4 (  
  位 BIT(4),
  二进制 BINARY(2) DEFAULT NULL, -- 字节数为2字节
  长二进制 BLOB
);

INSERT INTO T4 VALUES(6,'AF','FFFFFFFFFFFFF'); -- 十进制

INSERT INTO T4 VALUES(11,'AB1',NULL);

SELECT * FROM T4;


-- 布尔类型

CREATE TABLE boolean_test (    
  ID INT NOT NULL AUTO_INCREMENT,     
  Online_Flag TINYINT DEFAULT NULL,     
  Lock_Flag TINYINT(1) DEFAULT NULL,     
  PRIMARY KEY (ID)     
) ;

-- 测试语句:
INSERT INTO boolean_test(Online_Flag,Lock_Flag) VALUES(TRUE,FALSE);
 
INSERT INTO boolean_test(Online_Flag,Lock_Flag) VALUES(2,-1);  

INSERT INTO boolean_test(Online_Flag,Lock_Flag) VALUES(-256,256);  

SELECT  * FROM boolean_test;





-- =====================================================
-- 下面这些语句用于创建成绩管理数据库——CJGL、以及其中的表

-- 注意怎样说明非空、主键、外键

CREATE DATABASE cjgl CHARSET=gbk COLLATE=gbk_bin;

USE cjgl;


-- -------------------------------------
-- Table structure for specialty  专业表
-- -------------------------------------
DROP TABLE IF EXISTS specialty;

CREATE TABLE specialty (
  zno VARCHAR(4)   NOT NULL COMMENT'专业号',
  zname VARCHAR(20)   COMMENT'专业名',
  PRIMARY KEY (zno)
) ENGINE=INNODB  COMMENT='专业表';

-- ----------------------------
-- Insert Records of specialty
-- ----------------------------
INSERT INTO specialty VALUES ('1102','电子商务');

INSERT INTO specialty VALUES ('1103','会计学');

INSERT INTO specialty VALUES ('1201','法学');

INSERT INTO specialty VALUES ('1214','信息管理与信息系统');

INSERT INTO specialty VALUES ('1407','工商管理');

INSERT INTO specialty VALUES ('1409','会计学');

INSERT INTO specialty VALUES ('1601','食品科学与工程');

INSERT INTO specialty VALUES ('1805','计算机科学与技术');

INSERT INTO specialty VALUES ('1807','信息管理与信息系统');


SELECT * FROM specialty;


-- --------------------------------------
-- Table structure for student  学生表
-- --------------------------------------
DROP TABLE IF EXISTS student;

CREATE TABLE student (
  sno VARCHAR(10)  NOT NULL COMMENT '学号',
  sname VARCHAR(20)  NOT NULL COMMENT '姓名',
  ssex CHAR(1)  NOT NULL DEFAULT'男' COMMENT '性别',
  sbirth DATE COMMENT '出生日期',
  zno VARCHAR(4)   COMMENT'专业号',
  sclass VARCHAR(10)   COMMENT'班级',
  PRIMARY KEY (sno),  -- 定义主键
  KEY (zno),      -- 定义索引
  FOREIGN KEY (zno) REFERENCES specialty(zno) -- 定义外键
) ENGINE=INNODB ;

-- -----------------------------------
--  Insert Records of student  学生表中的记录
-- -----------------------------------
INSERT INTO student 
VALUES ('1114070116','欧阳宝贝','女','1997-01-08', '1407','工商1401');

INSERT INTO student 
VALUES ('1207040137','张冰霜','女','1996-05-23', '1214','信管1201');

INSERT INTO student VALUES ('1309070338','孙一凯','男','1993-10-11', '1102','商务1301');

INSERT INTO student VALUES ('1411855228','唐晓','女','1997-11-05', '1102','商务1401');

INSERT INTO student VALUES ('1411855321','蓝梅','女','1997-07-02', '1102','商务1401');

INSERT INTO student VALUES ('1411855426','余小梅','女','1997-06-18', '1102','商务1401');

INSERT INTO student VALUES ('1412855223','徐美利','女','1989-09-07', '1214','信管1401');

INSERT INTO student VALUES ('1412855313','郭爽','女','1995-02-14', '1601','食品1401');

INSERT INTO student VALUES ('1414320425','曹平','女','1997-12-14', '1407','工商1401');

INSERT INTO student VALUES ('1414855302','李壮','男','1996-01-17', '1409','会计1401');

INSERT INTO student VALUES ('1414855308','马琦','男','1996-06-14', '1409','会计1401');

INSERT INTO student VALUES ('1414855328','刘梅红','女','1991-06-12', '1407','工商1401');

INSERT INTO student VALUES ('1414855406','王承','男','1996-10-06', '1409','会计1401');

INSERT INTO student VALUES ('1416855305','聂鹏飞','男','1997-08-25', '1601','食品1401');

INSERT INTO student VALUES ('1418855212','李冬旭','男','1996-06-08', '1805','计算1401');

INSERT INTO student VALUES ('1418855232','王琴雪','女','1997-07-20', '1805','计算1401');


SELECT * FROM student;


-- ----------------------------
-- Table structure for course 课程表
-- ----------------------------
DROP TABLE IF EXISTS course;

CREATE TABLE course (
  cno VARCHAR(8)  NOT NULL COMMENT'课程号',
  cname VARCHAR(50) NOT NULL COMMENT'课程名',
  ccredit TINYINT  COMMENT'学分',
  cdept VARCHAR(20)   COMMENT'授课学院',
  PRIMARY KEY (cno)
) ENGINE=INNODB ;

/*  utf8_bin 是将字符串每个字符串用二进制数据编译存储 */

-- -------------------------------
-- Records of course 课程表中的记录
-- -------------------------------
INSERT INTO course VALUES ('11110140','管理信息系统','3','经济管理学院');

INSERT INTO course VALUES ('11110470','统计学A','3','经济管理学院');

INSERT INTO course VALUES ('11110930','电子商务','2','经济管理学院');

INSERT INTO course VALUES ('11111260','客户关系管理','2','经济管理学院');

INSERT INTO course VALUES ('11140260','网站规划与运营实训','2','信息学院');

INSERT INTO course VALUES ('18110140','C语言程序设计','3','信息学院');

INSERT INTO course VALUES ('18111850','数据库原理','3','信息学院');

INSERT INTO course VALUES ('18112820','网站设计与开发','2','信息学院');

INSERT INTO course VALUES ('18130320','Internet技术及应用','2','信息学院');

INSERT INTO course VALUES ('18132220','数据库技术及应用','2','信息学院');

INSERT INTO course VALUES ('18132370','Java程序设计','2','信息学院');

INSERT INTO course VALUES ('18132600','数据库原理与应用A','3','信息学院');

INSERT INTO course VALUES ('58130060','ASP.NET程序设计','3','信息学院');

INSERT INTO course VALUES ('58130540','计算机应用软件','3','信息学院');

SELECT * FROM course;

-- ----------------------------
-- Table structure for sc 选课表
-- ----------------------------
DROP TABLE IF EXISTS sc;




CREATE TABLE sc (
  sno VARCHAR(10)  NOT NULL COMMENT'学号',
  cno VARCHAR(8)  NOT NULL COMMENT'课程号',
  grade TINYINT  COMMENT'成绩',
  PRIMARY KEY (sno,cno),
  FOREIGN KEY (cno) REFERENCES course (cno),
  FOREIGN KEY (sno) REFERENCES student (sno)
)  COMMENT='选修表';

-- ----------------------------
-- Records of sc 选课表的数据
-- ----------------------------
INSERT INTO sc VALUES ('1414855328','58130540','85');

INSERT INTO sc VALUES ('1414855406','18110140','75');

INSERT INTO sc VALUES ('1412855223','18130320','60');

INSERT INTO sc VALUES ('1114070116','11110930','65');

INSERT INTO sc VALUES ('1414855302','11110140','90');

INSERT INTO sc VALUES ('1411855228','18132220','96');

INSERT INTO sc VALUES ('1418855232','18110140','87');

INSERT INTO sc VALUES ('1414855328','18130320','96');

INSERT INTO sc VALUES ('1414855406','11110470','86');

INSERT INTO sc VALUES ('1412855223','58130540','77');

INSERT INTO sc VALUES ('1414855406','18132220','84');

INSERT INTO sc VALUES ('1114070116','18130320','90');

INSERT INTO sc VALUES ('1411855321','11110470','69');

INSERT INTO sc VALUES ('1418855232','58130540','91');

SELECT * FROM SC



-- 删除表

DROP TABLE sc;

DROP TABLE course;

DROP TABLE specialty;

DROP TABLE student;
发布了17 篇原创文章 · 获赞 5 · 访问量 329

猜你喜欢

转载自blog.csdn.net/weixin_45116412/article/details/104938262