第二章(4课时0918 占用第2天1课时)

DQL、DML、DDL、DCL的概念与区别

1. 数据查询语言DQL

2 .数据操纵语言DML(INSERT UPDATE DELETE)

3. 数据定义语言DDL

4. 数据控制语言DCL

1、创建数据库

CREATE DATABASE  [IF NOT EXISTS] 数据库名

DROP DATABASE 数据库名

2、建表

相关概念

1)主键

primary key

1.1 不能重复 可以是单个字段,或联合主键

1.2 不能为null

2)外键Foreign Key

设计一对一和一对多关系时用到,用来约束表数据的合法性。

3)Constraint

约束类型

not null 不允许为空

unique 唯一性

primary key 主键

foreign key 外键

default  默认值

check(mysql不支持)

数据类型

1)数值型(int,decimal(10,2) )

2)日期型(date datetime time)

3)字符串型(varchar)

建数据库表

数据类型:

数值型

int /integer整型 整数类型1,2,3,不带小数位的 一般第一个字段用这种类型,并且定义自动增长

decimal(10,2) 表示一位10位,其中小数位2位,整数位是10-2=8位。

上面两种类型是重要的,以下的了解

bit           2的0-6  1-64  

tinyint2的0-8   1-256

boolean  真/假 true/false 1/0tinyint(1)

smallint   2的0-16

mediunint  2的0-24

int/integer   2的0-32

bigint           2的0-64    自增主键

float             可以存小数的,单精度    (模糊等于,不适合存太精确的值)

double          可以存小数的,双精度

decimal/dec    decimal(M,N)   如果不定义小数位,默认小数位为0,即为整数。  对

 字符串

varchar 可变长度字符串型 中文英文特殊符号 字母下划线 (非数字非日期) 0-65535 2的16次方-1

CHAR(M) 固定长度  假设m=10即使你向里放置的值是'abc'他自动用空格把内容被全到10位 'abc       '   

                  0-255     2的8次方-1  

text 不常用 以二进制大对象。

blob二进制对象存储大数

字符串类型使用规则:

经常变化用varchar,固定长度就用char

尽量用varchar

如果超过255只能用varchar 

能用varchar的也不要用text

日期型

datetimeyyyy-mm-dd hh:mm:ss   日期+时间

date 年月日yyyy-mm-dd yyyymmdd 日期

time   hh:mm:ss   hhmmss 时间

year   yyyy   年

timestamp yyyymmdd hhmmss   时间戳

创建表:

create table表名(

字段名1  数据类型  约束PRIMARY KEY

字段名1  数据类型  约束,

字段名n  数据类型  约束,

[CONSTRAINT`外键名` ]FOREIGN KEY(`当前表里的字段名`)REFERENCES`目标表名` (`目标字段名`)

其他选项(例如存储引擎、字符集等选项)

例:

CREATE TABLE `t_student` (

  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,

  `stu_name` varchar(10) NOT NULL,

  `birthday` datetime DEFAULT NULL,

  `class_id` int(11) DEFAULT NULL,

  CONSTRAINT `fk_classid` FOREIGN KEY (`class_id`) REFERENCES `t_class` (`class_id`)

) ENGINE=InnoDBDEFAULT CHARSET=utf8;

注意:CONSTRAINT `fk_classid` 可以省略,简化后的代码

CREATE TABLE `t_student` (

  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,

  `stu_name` varchar(10) NOT NULL,

  `birthday` datetime DEFAULT NULL,

  `class_id` int(11) DEFAULT NULL,

   FOREIGN KEY (`class_id`) REFERENCES `t_class` (`class_id`)

) ENGINE=InnoDBDEFAULT CHARSET=utf8;

ENGINE=MyISAM或者InnoDB

CHARSET=utf8 国际化编码

存储引擎用InnoDB或MyISAM的区别

InnoDB支持事务和外键 他更好。

其他约束:

•NOT NULL,字段值不允许为空。

•NULL,字段值可以为空。

AUTO_INCREMENT(自动增长   定义在主键上 如果这个值输入null,自动补上

注意用AUTO_INCREMENT时该列必须定义为主键 )

•PRIMARY KEY,指定字段为主键。

COMMENT,设置字段的注释信息。

DEFAULT,设置字段的默认值。

例:

CREATE TABLE `t_class` (

`classno` int(11) NOT NULL AUTO_INCREMENTPRIMARY KEY,

`classname` varchar(255)DEFAULT ' ' COMMENT '班级名称',

  `createdate` datetime DEFAULT NULL,

  `stamp` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,

  `sal` decimal(10,2) NOT NULL,

 ......

) ENGINE=INNODBDEFAULT CHARSET=utf8;

unique

Foreign KEY 

作用:是对表数据合法性进行约束。该表的外键指向另一个表的主键

命名规则:主键pk_主键名

                   外键fk_外键名

                   unique uk_

用工具建外键(掌握):

用语句建:

DDL:数据定义语言 它的作用是会更改表结构

1)建表时直接建外建

foreign KEY( 当前表字段名)REFERENCES外部表名(外部表字段名)

注意:当前表字段类型一定与外建关联的字段类型相同,名称可以不同。

foreign KEY (deptno) REFERENCES dept(deptno)

*****enum(单选) set(多选)

create table person(

sex enum('男','女'),

interest set('听音乐','看电影','购物','旅游','游泳','游戏')

);

例子:带枚举和set类型的

CREATE TABLE `t_student2` (

  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,

  `stu_name` varchar(20) NOT NULL,

  `birthday` date NOT NULL,

`sex` enum('男','女') DEFAULT NULL,

  `interest` set('吃','喝','玩','乐','烫头') DEFAULT '',

  `classid` int(11) DEFAULT NULL,

  CONSTRAINT `fk_classid2` FOREIGN KEY (`classid`) REFERENCES `t_class` (`class_id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

习题

1.学校想做一个选课系统,其中涉及到课程表,学生表,请分别创建这两个表,自己思考表中应有的列及数据类型。

2.学校有一个选课系统,其中包括如下关系模式:

系(系编号: 主键,

   系名称:  唯一键,

   系主任: 非空约束,

   系所在校去:取值范围只能在南湖校区和浑南校区)

班级(班级编号: 主键,

     班级名称: 唯一键,

     所属系:  外键)

3.创建学生表,包含如下属性:

学号 定长字符型 10位 主键

姓名 变长字符型 20位 非空

性别 定长字符型 2位 取值范围只能为男或女

出生日期 日期型

所在班级

第一步:系表

create table t_depart(

d_id int not null auto_increment PRIMARY key,

  d_name VARCHAR(50) unique,

  d_head VARCHAR(20) not null,

d_area enum('南湖校区','浑南校区')

)ENGINE=INNODB DEFAULT CHARSET=utf8;

第二步 :班级表

create table t_class(

c_id int not null auto_increment PRIMARY key,

c_name VARCHAR(50) UNIQUE,

d_id int(11) default null,

FOREIGN key (d_id) REFERENCES t_depart(d_id)

)ENGINE=INNODB DEFAULT CHARSET=utf8;

第三步:

CREATE TABLE t_STUDENT(

s_id  int(10) not  null PRIMARY KEY,

s_name  VARCHAR (20) not NULL,

sex enum ('男','女'),

  birthday  DATE ,

  c_id int  unique,

FOREIGN key (c_id) REFERENCES t_class(c_id )

)ENGINE=INNODB DEFAULT CHARSET=utf8;

复制表

•方法一:在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下。

•create table 新表名 like 源表

方法二、在create table语句的末尾添加一个select语句

create table 新表名 select * from 源表

复制表带数据

create table emp_bak2 select * from emp 

复制表只要结构,不带数据

create table emp_bak2 select * from emp where 0>1

删除表

drop table 表名;

修改表

alter table表名   添加(add) 修改(modify) 删除表(drop) 结构

添加列:

•ALTER  TABLE 表名ADD列名 数据类型   长度 列属性;

ALTER TABLE Emp ADD Tele VARCHAR(50) not NULL;

commit;

修改列

•ALTER TABLE 表名MODIFY 列名 新数据类型   长度 新列属性;

alter table emp MODIFY tele varchar(255);

commit;

删除列

•ALTER   TABLE 表名DROP   COLUMN列名;

alter table emp drop COLUMN tele;

commit;

操作约束条件(add modify drop)

alter table表名add constraint约束名 约束类型 (字段名);

alter table EMP add constraint PK_EMP primary key(EMPNO);

联合主键:

alter table EMP add constraint PK_EMP primary key(EMPNO,ename);

添加外建

alter table EMP add constraint FK_DEPTNO foreign key(DEPTNO) referencesDEPT (DEPTNO);

删除主建

alter table 表名 drop primary key;      (一个表的主键只能有一个,删除时所以不需要指定名字)

alter table 表名 drop foreign key 外键名 ;  (因为外键可以有多个)

alter table 表名 dropindex 索引名;

index:是索引的意思。索引是为了加快查询速度的。如果表数据量比较小,不建议建索引。

其他指令(了解)

• alter table 表名 engine=新的存储引擎类型

•  alter table 表名 default charset=新的字符集

•  alter table 表名 auto_increment=新的初始值

  alter table 表名 pack_keys=新的压缩类型

修改表名

rename table 旧表名 to 新表名

转至:↓↓↓↓

链接:https://www.jianshu.com/p/8a7f36e2dbd6

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354