MySQL 基础+高级篇- 数据库 -sql -尚硅谷 111-128章

USE vain;
CREATE TABLE copy LIKE stu;#仅仅只能复制表的结构
CREATE TABLE copy2 (SELECT * FROM stu);#复制表的结构+数据
CREATE TABLE copy3 (SELECT sno,sname FROM stu WHERE 1=0);#只复制部分结构不复制数据
ALTER TABLE copy3 DROP COLUMN sname;
/*
数值型:
整形
浮点型
定点型
字符型:
较短的
*/
/*日期型
date只保存日期
time 只保存时间
year 只保存年
datetime 保存日期+时间
timestamp保存日期+时间

特点:
             字节        范围     时区等影响
datetime      8           1000-9999     不受     
timestamp     4           1970-2038     受
*/
CREATE TABLE tab_data(
t1 DATETIME,
t2 TIMESTAMP
);
INSERT INTO tab_data VALUES(NOW(),NOW());
SELECT * FROM tab_data;
#常见约束
/*
含义:一种限制,用于限制表中的数据,为了最终保证表中的数据的准确性
分类:六大约束
      NOT NULL: 非空,用于包装
      比如姓名,学号等
      default:默认,用于保证该字段有默认值
      比如性别
      primary key:主键约束,用于保证该字段值具有唯一性,并且非空
      比如学号,员工编号等
      unique:唯一,用于保证该字段的值具有唯一性,可以为空
      比如座位号
      check:检查约束【mysql中不支持】
      比如年龄性别
      foreign key外键:用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
      在从表加个外键约束,用于引用主表中某列的值
      比如学生表的专业编号,员工表的部门编号
*/


#创建表时添加约束
#1.添加列级约束
USE vain;
CREATE TABLE stuinfo (
  id INT PRIMARY KEY,
  #主键
  stuName VARCHAR (20) NOT NULL,
  #非空
  gender CHAR(2) CHECK (gender = '男' 
    OR gender = '女'),
  #检查约束
  seat INT UNIQUE,
  #唯一
  age INT DEFAULT 18
  #默认约束
) ;
#2.添加表级约束
/*
语法:在各个字段的最下面
【constraint 约束名(约束名可以不起)】 + 约束类型 (约束字段)
*/
DROP TABLE IF EXISTS `stuinfo`;
CREATE TABLE major
(
   id INT PRIMARY KEY,
   majorName VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS stuinfo (
  id INT,
  stuname VARCHAR (20),
  gender CHAR(2),
  seat INT,
  age INT,
  majorid INT,
  CONSTRAINT pk PRIMARY KEY (id),
  #主键
  CONSTRAINT uq UNIQUE (seat),
  #唯一
  CONSTRAINT ck CHECK (gender = '男' 
    OR gender = '女'),
  #检查
  CONSTRAINT fk FOREIGN KEY (majorid) REFERENCES major (id) #外键
) ;

SHOW INDEX FROM stuinfo;
#主键和唯一的区别
/*        保证唯一性 是否为空 一个表中可以有多少个 是否运行组合
主键        1           0        至多有一个          可以,但不推荐
唯一        1           1        可以有多个          可以,但不推荐
*/

你可能感兴趣的:(数据库学习笔记)