MySQL新手入门之创建数据库和表

SQL

什么是SQL

  • 结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。

  • SQL语句可以分单行或者多行书写,以分号结尾。

  • 可使用空格跟缩进增强语句的可读性。

  • MySQL不区分大小写。

  • 注释有3种:

    • – 单行注释,–后面紧跟的空格不能省略

    • # 单行注释

  • /* 多行注释 */

SQL分类

  • DDL(Data Definition Language)数据定义语言
    • 用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter 等
  • DML(Data Manipulation Language)数据操作语言
    • 用来对数据库中表的数据进行增删改。关键字:insert,delete,update 等
  • DQL(Data Query Language)数据查询语言
    • 用来查询数据库中表的记录(数据)。关键字:select等
  • DCL(Data Control Language)数据控制语言(了解)
    • 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE等

    创建删除数据库

CREATE DATABASE 数据库名 [default charset 编码格式 COLLATE 排序规则];

Drop database 数据库名;删除数据库

Use database;切换数据库

-- 创建数据库     create创建     database 数据库      bookdb你取得数据库的名字
create database bookdb;

-- 给数据库指定字符集和排序规则
create database studb  default charset  utf8  collate   utf8_general_ci


-- 删除数据库  drop删除  database数据库  studb你取得数据库的名字
drop  database studb;


-- 不要修改数据库的名称
-- 可以修改数据库字符集
alter  database bookdb charset  utf8;



-- 如果数据库不存在则创建,存在则不创建。
create database  if not exists bookdb


-- 创建数据库,不存在则创建,并指定制定字符集
create database if not exists bookdb character utf8;


-- 显示所有数据库
show databases;

-- 查看某个数据库的创建以及字符集
show create database bookdb;


-- 使用数据库
use bookdb;

-- 查询当前正在使用的数据库
select database();

创建表和删除表

  • 语法

    create table 表名 (
    	列名  列类型类型  [约束]  [COMMENT '备注1'] ,
    	列名  列类型类型  [约束]  [COMMENT '备注2'] ,
    	列名  列类型类型  [约束]  [COMMENT '备注3'] ,
    	......
    	列名  列类型类型  [约束]  [COMMENT '备注N'] 
    );
    

创建表和删除表

  • 语法

    create table 表名 (
    	列名  列类型类型  [约束]  [COMMENT '备注1'] ,
    	列名  列类型类型  [约束]  [COMMENT '备注2'] ,
    	列名  列类型类型  [约束]  [COMMENT '备注3'] ,
    	......
    	列名  列类型类型  [约束]  [COMMENT '备注N'] 
    );
    

数据类型

​ MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值(整型/小数)、日期/时间和字符串(字符)类型。

整型
类 型大 小范围(有符号)范围(无符号)
TINYINT(m)1byte(-128,127)(0,255)
SMALLINT(m)2byte(-32 768,32 767)(0,65 535)
MEDIUMINT(m)3byte(-8 388 608,8 388 607)(0,16 777 215)
INT(m)或INTEGER(m)4byte(-2 147 483 648,2 147 483 647)(0,4 294 967 295)
BIGINT(m)8byte(-9223372036854775808,9223372036854 775 807)(0,18446744073709551 615)
  • 参数m只是当位数小于m时候显示的宽度,对数字大小没有限制,意义不大。

  • ZEROFILL表示显示长度不够的用0占位。

  • 要看到截图中的效果需要在命令行中输出。

  • 如果实际插入的值超过了类型的限制则报错,无法插入。

  • 如果参数m不给出会有默认值,每种类型的默认值不同。

  • 默认是有符号的,如果要定义无符号的需要加上关键字UNSIGNED

  • 定义了ZEROFILL则直接是有无符号的,ZEROFILL跟有符号冲突,只能选择1个。

浮点
类 型大 小含 义
float(m,d)4byte单精度浮点型,m总个数,d小数位
double(m,d)8byte双精度浮点型,m总个数,d小数位
  • m表示整个小数的总长度,d表示小数位的长度

    • 也可以不给(m,d)值,直接使用float跟double,则默认会按照实际的精度(由实际的硬件跟操作系统决定)来显示。
    • (m,d)会采取四舍五入,因此会出现精度丢失的问题。
    • (m,d)的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用。
定点数

​ 浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

  • decimal(P,D)
    • P表示有效数字的精度,P的范围为[1,65]
    • D是表示小数点后的位数,D的范围是[0,30],MySQL要求D<=P
    • DECIMAL(6,2) 表示此列最多可以存储6位数字,小数位数为2位; 因此,此列的范围是从-9999.999999.99
    • DECIMAL(P)相当于DECIMAL(P,0)
    • DECIMAL在不指定精度时,默认整数为10,小数为0
日期和时间类型
类 型大 小含 义
DATE3表示日期,包含年月日
TIME3表示时间,包含时分秒
YEAR1表示年份
DATETIME8表示日期,包含年月日,时分秒
TIMESTAMP4表示日期,包含年月日,时分秒,自动更新
  • %Y表示年,%m表示月,%d表示天,%H表示小时,%i表示分,%s表示秒。
  • YEARTIMEDATE用法类似
字符
类 型含 义
char(n)固定长度,最多255个字符
varchar(n)固定长度,最多65535个字符
tinytext可变长度,最多255个字符
text可变长度,最多65535个字符
mediumtext可变长度,最多2的24次方-1个字符
longtext可变长度,最多2的32次方-1个字符
BLOB二进制形式的长文本数据
MEDIUMBLOB二进制形式的中等长度文本数据
LONGBLOB二进制形式的极大文本数据
  • char(n)若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。定长,浪费空间,速度快。
  • varchar(n)是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4)存入3个字符将占用4个字节。不定长,节省空间。
  • text不用指定长度n,text是实际字符数+2个字节。text类型不能有默认值。
  • BLOB都是存储二进制数据,存储的数据只能整体读出。
枚举

​ 实现将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个。

  • 语法:enum(可能出现的元素列表)

    -- 定义sex列,类型为枚举,值只能是列表中的某一个值,可以为null
    create table t(sex enum('男','女') );
    
    

表结构操作

查询表
  • 查询某个数据中所有的表

    show tables;
    
  • 查询表结构

    desc student;
    
  • 查询表的创建SQL

    show create table student ;
    
修改表
  • 修改表名

    • alter table 表名 rename to 新的表名;

      alter table student rename to s1;
      
  • 修改表的字符集

    • alter table 表名 character set 字符集的名称;

      alter table student character set utf8
      
  • 添加一列

    • alter table 表名 add column 列名 列类型 [约束];

    • alter table 表名 add (列名 列类型 [约束] , 列名 列类型 [约束] , ...... );

      alter table student add  column stu_height int  not null 
      alter table student add (stu_weight int);
      
    • alter table 表名 add column 列名 列类型 [约束] [FIRST]/[AFTER 列名];

    • alter table s1 add  column stu_height int  not null  FIRST 
      alter table s1 add  column stu_height int  not null  AFTER stu_age
      
  • 修改列名称跟类型

    • alter table 表名 change 原列名 新列名 新数据类型;

      alter table student change  stu_weight  stu_weight1  double
      
  • 删除列

    • alter table 表名 drop 列名;

      alter table student drop column stu_weight
      
删除表
  • drop table 表名;

  • drop table if exists 表名;

    drop table student;
    drop table if exists student;
    

数据完整性

数据完整性概念

数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)

数据完整性分为4类:

实体完整性(Entity Integrity)、

域完整性(Domain Integrity)、

引用完整性(Referential Integrity)

用户自定义完整性(User-defined Intergrity)。

实体完整性(Entity Integrity)

实体完整性将行定义为特定表的唯一实体,它规定表的每一行记录在表中是唯一的

实体完整性在表中的约束体现为:

PRIMARY KEY(主键)约束:非空 唯一。一张表只能有一个主键。但是一个主键可以包含一列或者多列

AUTO_INCREMENT (自增)约束:一般为主键服务。

**UNIQUE(唯一)**约束:允许为空

域完整性(Domain Integrity)是考虑如何限制向表中输入的值的范围

域完整性的约束:

FOREIGN KEY(外键)约束

DEFAULT(默认值)约束

NOT NULL(非空)约束

Check——mysql没有
引用完整性(Referential Integrity)

是在插入或删除数据时,维护表见数据一致性的手段

它一般建立在主键与外键之间的关系,或者外键与唯一索引之间的关系的基础上

MySQL禁止用户进行下列操作。
(1)当主表中没有关联的记录时,将记录添加到相关表中。

(2)更改表中的值并导致相关表中的记录孤立。

(3)从主表中删除记录,但仍存在与该记录匹配的相关记录

建表以后表的管理

修改列

Alter table 表名 change 字段名 新字段名 新的数据类型 新的约束;

添加列

Alter table 表名 add 字段名 数据类型 约束;
删除列

Alter table 表名 drop 字段名;

表外添加主键、删除主键(格外注意复合主键)

Alter table 表名 add CONSTRAINT 约束名 primary key(主键字段,字段2)

Alter table 表名 drop primary key;-- 有自增必须先删除,使用修改列进行

添加外键和删除外键

Alter table 表名 add constraint 约束名 foreign key(外键) references 另外一张表(主键)

Alter table 表名 drop foreign key 约束名

添加default约束

Alter table 表名 alter column 列名 set default ‘’

或者用修改列也可以
添加唯一约束

Alter table 表名 add unique(列名)

Alter table 表名 drop index 列名

约束

​ 对表中的数据进行限定,保证数据的正确性、有效性和完整性。

分类:

  • 主键约束:primary key
  • 非空约束 : not null
  • 唯一约束 : unique
  • 外键约束 : foreign key

主键约束

​ 主键,又称主码,是表中一列或多列的组合。主键要求主键列的数据唯一,并且不允许为空,主键能够唯一地表识表中的一条记录。一个表只能有一个主键,但是可以是多列(复合主键)。

  • 使用

    -- 方式1: 直接在主键字段后标识
    create table t(
    	id int primary key ,
    	name varchar(10)
    );
    
    -- 方式2: 后面专门定义主键约束,如果是复合主键(多列)只能使用这种方式
    create table t(
    	id int,
    	name varchar(10) ,
    	primary key(id)
    );
    
    -- 方式3:在已存在的表添加主键约束
    alter table t modify id int primary key;
    alter table t add constraint id_pri primary key (id)
    
    
    -- 删除主键约束
    alter table t drop primary key;
    
    

非空约束

​ 定义表的时候限定为非空约束后则此字段不能有null值。

  • 使用

    -- 创建表的时候给指定列添加非空约束
    create table t(	 
    	stu_name varchar(10) not null
    );
    
    -- 在表已经存在的基础上添加非空约束
    alter table t modify stu_name varchar(10) not null;
    
    -- 删除非空约束
    alter table t modify stu_name varchar(10);
    
    

唯一约束

​ 限定列数据不能有重复的值,null可以重复。

  • 使用unique

    -- 创建表的时候给指定列加上唯一约束
    create table t(	 
    	stu_name varchar(10) unique 
    );
    
    -- 在表存在的前提下添加唯一约束
    alter table t modify stu_name varchar(10) unique;
    alter table t add constraint name_unique unique(stu_name);
    
    
    -- 删除列上的唯一约束
    alter table t drop index stu_name
    -- 通过约束名删除列上的唯一约束
    alter table t drop index name_unique;
    
    

外键约束

​ 让表与表产生关系,从而保证数据的正确性。

  • 使用foreign key

    -- 先创建学生表,父表
    create table student(
    s_id int primary key ,
    	s_name varchar(10) 
    );
    
    -- 再创建子表
    create table score (
    	s_id int ,
    	s_name VARCHAR(10),
    	s_socre int ,
    	user_id int ,
        -- 指定字段user_id是外键,指向父表student表中的s_id字段,外键必须指向父表的主键
    	-- constraint s_foreign 这里可以加上,给这个外键取个名字  
        FOREIGN KEY(user_id) references student(s_id)
     ); 
     
    -- 创建表后再添加外键约束
     alter table score add constraint score_foreign foreign key (user_id) references student(s_id)  
     
     --  删除外键约束
     alter table score drop foreign key score_foreign;
     
    
    • 创建完父表与字表的外键约束关系后,则子表的外键字段值如果不为null的话,则必须是主表中的存在值
    • 建立好外键约束关系后,如果子表外键值使用了主表的一个值,则默认情况下主表的这个值不能删除或者改成别的值。如果不要这个默认操作需要在定义外键的时候设置。
  • 级联删除、级联更新

    • 当删除主表的数据时,子表的行为可以设置级联删除跟级联更新,也可以设置null删除,设置null更新。

      create table score (
      	s_id int ,
      	s_name VARCHAR(10),
      	s_socre int ,
      	user_id int ,
          -- 设置外键时,级联删除跟级联更新
      	FOREIGN KEY(user_id) references student(s_id) on delete cascade on update cascade 
       );
       
       -- 设置外键时,级联删除跟级联更新
       alter table score add constraint score_foreign foreign key (user_id) references student(s_id) on update cascade on delete cascade 
       
       create table score (
      	s_id int ,
      	s_name VARCHAR(10),
      	s_socre int ,
      	user_id int ,
          -- 设置外键时,set null删除跟set null更新
      	FOREIGN KEY(user_id) references student(s_id) on delete set null on update set null );
       
        -- 设置外键时,set null删除跟set null更新
       alter table score add constraint score_foreign foreign key (user_id) references student(s_id) on update set null on delete set null  
       
      

自动增长

​ 当某列是数值时,我们可以给这列设置,让它自动增长。一般跟数值类型的主键一起使用。关键字auto_increment

  • 使用

    -- 创建表的时候直接定义自增长
    create table student(
    	s_id int primary key auto_increment,
    	s_name varchar(10) 
    ) auto_increment=10000 -- 设置自动增长从10000开始
    
    -- 设置自动增长从10000开始
    alter table student  auto_increment=10000;
    
    -- 给已经存在的表字段添加自增长
    alter table student s_id int auto_increment;
    
    -- 删除自增长
    alter table student modify s_id int ;
    
    
    • 添加自动增长以后,也同样可以对字段进行主动赋值。
    • 如果手动赋值跳跃性,则后面会直接根据最大值++。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值