第2章(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  

tinyint    2的0-8   1-256 

boolean  真/假 true/false 1/0    tinyint(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

日期型

datetime yyyy-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=InnoDB DEFAULT 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=InnoDB DEFAULT 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_INCREMENT  PRIMARY 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=INNODB DEFAULT 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) references DEPT (DEPTNO);

删除主建

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

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

alter table 表名 drop index 索引名;

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

其他指令(了解)

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

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

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

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

修改表名

rename table 旧表名 to 新表名

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 4,868评论 0 0
  • 接下来的一些内容,我们需要提前学一些简单的sql语句,方便大家理解接下来的知识。 DDL—数据定义语言(Creat...
    不排版阅读 3,203评论 0 1
  • 数据库:存放数据的仓库; 硬盘 运行内存 mysql 现在被oracle收购了 oracle oracle公司 s...
    凤之鸠阅读 4,688评论 0 0
  • MySQL5.6从零开始学 第一章 初始mysql 1.1数据库基础 数据库是由一批数据构成的有序的集合,这些数据...
    星期四晚八点阅读 4,895评论 0 4
  • 1、create table选项1、指定列选项:default、comment2、指定表选项:engine、aut...
    老头子_d0ec阅读 1,751评论 0 0

友情链接更多精彩内容