Mysql系列---【mysql基础&约束】

SQL语句分类

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

SQL通用语法

SQL语句可以单行或多行书写,以分号结尾
可使用空格和缩进来增强语句的可读性
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
例如:SELECT * FROM user。
同样可以使用/**/的方式完成注释
常使用的数据类型:

类型名称   说明
int(integer) 整数类型
double 小数类型
decimal(m,d) 指定整数位与小数位长度的小数类型
date 日期类型,格式为yyyy-MM-dd,包含年月日,不包含时分秒
datetime 日期类型,格式为 YYYY-MM-DD HH:MM:SS,包含年月日时分秒
timestamp 日期类型,时间戳
varchar(M) 文本类型, M为0~65535之间的整数




DDL之数据库操作:database
   

/*

    1.创建数据库
    2.使用数据库
    3.查看某个数据库的定义的信息
    4.查看所有数据库
    5.查看正在使用的数据库
    6.删除数据库
*/
#    1.创建数据库(两种方式)
                CREATE DATABASE day01;#未指定编码表,系统默认utf8
                 CREATE DATABASE day011 CHARACTER SET gbk;#自己指定编码表gbk

               
#    2.使用数据库
       SELECT DATABASE ();#查看当前使用的数据库
        USE day011;#切换数据库

        
#    3.查看某个数据库的定义的信息
       SHOW CREATE DATABASE day01;
        
#    4.查看所有数据库

        SHOW DATABASES;

#    5.查看正在使用的数据库
       SELECT DATABASE();

#    6.删除数据库
        DROP DATABASE day01;

DDL之表操作:table

/*
创建表
格式:
     create table 表名(
         字段名1 类型(长度) 约束,
         字段名2 类型(长度) 约束,
         字段名3 类型(长度) 约束        #最后一个字段后面不用写逗号           
     );
     约束: 就是给某个字段/列的取值添加限制
    比如: 某个列的取值不能重复(唯一),不能为空(非空)
     主键:    作为主键的字段的取值不能重复(唯一),不能为空(非空)
     主键约束: 被作为主键的字段,添加主键约束后,该字段则不能重复(唯一),不能为空(非空)
     一般情况下使用id(编号)作为主键,不能使用具有业务意义的字段作为主键
       
     如何添加主键约束?
         在定义表结构时,作为主键的字段后面 + primary key
        
     注意:
         如果主键的类型为int,可以设置主键自动增长,这样mysql负责维护主键的值,
         添加数据时,不用指定主键的值了
        主键添加自动增长:
         在定义表结构时,作为主键的字段后面 + primary key auto_increment;
         不能设置每次增长多少,但是可以设置主键的值从几开始
        ALTER TABLE 数据库表名 AUTO_INCREMENT=数据值;
     练习:
         创建student表格
        编号: sid    int
         姓名: sname    varchar(200)
         性别: sgender varchar(10)
         年龄: sage int
*/
#新建数据库
CREATE DATABASE day02;
#切换数据库
USE day02;
#查看当前数据库
SELECT DATABASE ();
DROP DATABASE day02;

#新建数据库
CREATE DATABASE day02;

#查看数据库中的所有表

        use day02;
         show tables;

 

#创建student表
CREATE TABLE student(
sid INT,
sname VARCHAR(200),
sgender VARCHAR(10),
sage INT
);

#创建分类表catgory
#没有指定主键约束,添加数据时,id可以重复,可以为空
CREATE TABLE category(
     cid INT,
     cname VARCHAR(100)
);

#删除表
DROP TABLE category;
#创建分类表category
#已经添加主键约束,cid不能重复(唯一),不能为空(非空)
CREATE TABLE category(
     cid INT PRIMARY KEY,
     cname VARCHAR(100)
);

#删除表

DROP TABLE student;
#创建分类表category
#已经添加主键约束,主键自动增长

CREATE TABLE category(
     cid INT PRIMARY KEY AUTO_INCREMENT,
     cname VARCHAR(100)
);

#设置主键从200开始
ALTER TABLE category AUTO_INCREMENT = 200

SELECT * FROM category;#查询category中所有的字段

/*
     查看和删除数据库表
     1.查看数据库中的所有表
     2.查看表结构
     3.删除表
*/
USE day17;
#1.查看数据库中所有的表
SHOW TABLES;
#2.查看表结构
DESC product;
#3.删除表
DROP TABLE product;

#修改表结构

CREATE DATABASE day17;
CREATE TABLE product(
cid INT PRIMARY KEY,
cname VARCHAR (100),
price INT
);
#修改表结构
#1.修改表添加列
#alter table 表名    add 列名 类型(长度) 约束;
ALTER TABLE product ADD bianhao INT ;

#2.修改表修改列的类型长度及约束
#alter table 表名 modify 列名 类型(长度) 约束;
ALTER TABLE product MODIFY cid INT AUTO_INCREMENT;
INSERT INTO product VALUES (1,'mm',18,01);

#3.修改表修改列名
#alter table 表名 change 旧列名 新列名 类型(长度) 约束;
ALTER TABLE product CHANGE bianhao bian VARCHAR (23);

#4.修改表删除列
#alter table 表名 drop 列名;
ALTER TABLE product DROP bian;

#5.修改表名
#rename table 旧表名 to 新表名;
RENAME TABLE product TO s;
RENAME TABLE  s TO product;

#6.修改表的字符集
#alter table 表名 character set 编码表;
ALTER TABLE product CHARACTER SET gbk;
ALTER TABLE product CHARACTER SET utf8;

/*
添加数据的三种方式
     格式:
     insert into 表名(字段1,字段2...) values(值1,值2...);       
        
     注意:
         字段的值如果是varchar类型,可以使用单引/双引,
         但是建议用单引
*/
#1.全列名添加
INSERT INTO product(cid, cname,price)VALUES(5,'音频',10);
#2.全列值添加
INSERT INTO product VALUES (6,'化妆品',21);
#3.指定列值在表中添加新的一行 主键自动增长,mysql帮助维护,添加数据时,可以不用写
INSERT INTO product (price) VALUES (11);
#注意: 如果不指定字段,values中需要写null,为主键占一个位置,在末尾会创建一行新的记录
INSERT INTO product VALUES(NULL,NULL,23);
#以上方式都可以使用批量添加
INSERT INTO product(cid,cname,price)
VALUES(10,'床上用品',21),(11,'汽车用品',14);
INSERT INTO product VALUES(12,'书籍',100),(13,'电器',34);
INSERT INTO product(cname) VALUES('辣条'),('肉制品');
INSERT INTO product VALUES(NULL,NULL,90),(NULL,NULL,80),(NULL,NULL,70);
SELECT * FROM product;

/*
修改数据
     格式:
     update 表名 set 字段名1=值1,字段名2=值2... where 条件;
     update category set cname='饮品';#表中的cname的值全部变为 '饮品'
        
     java        mysql
     >        >
     >=        >=
     <        <
     <=        <=
     ==        =
     !=        != 或者 <>
     &&        and
     ||        or
     !        not
*/
#把id为7的记录cname改为'服饰'
UPDATE product SET cname = '服饰' WHERE cid=7;
#把id是偶数的记录cname改为'服饰'
UPDATE product SET cname = '服饰' WHERE cid%2=0;
#把id为7并且cname为'服饰'的记录cname改为'体育用品'
UPDATE product SET cname ='体育用品' WHERE cid = 7 AND cname = '服饰';
#把id为1或者cname为'食品'的记录cname改为'汽车用品'
UPDATE product SET cname = '汽车用品'WHERE cid=1 OR cname ='食品';

/*
删除表数据
     格式:   
         delete from 表名 where 条件;#不写条件,删除表中的所有记录
        
         delete和truncate的区别?
        
         delete: 删除表的所有数据,会记录id的最大值
         TRUNCATE: 删除表的所有数据,先摧毁整个表结构,重新创建,
             不会记录id的最大值,id从新开始
*/
#删除id为7的记录
DELETE FROM product WHERE cid=7;
#删除id是偶数的记录
DELETE FROM product WHERE cid%2=0;
#删除id为1或者cname为‘汽车用品’
DELETE FROM product WHERE cid=1 OR cname ='汽车用品';
#删除表中的所有数据
DELETE FROM product ;
#注意:cid:从上次记录的最大值+1开始
INSERT INTO product (cname) VALUES ('饮品');
TRUNCATE TABLE product;#删除表中的所有数据

/*
主键约束: 唯一,非空
     一个表只能有一个主键    
*/
#添加主键约束的三种方式
#1.在定义表结构时,作为主键的字段后面+primary key
CREATE TABLE chanpina(
cid INT PRIMARY KEY ,
cname VARCHAR(100)
);

/*2.在定义表结构时,已经指定了所有的字段,
   在最后使用constraint关键字,添加主键约束
格式:
         [constraint 主键约束名称] primary key(作为主键的字段名称)
         注意:
             []里面的内容是可以省略的,如果要写,不能写[]
             []: 代表的是,里面的内容,作为可选项
*/
DELETE TABLE chanpin;
CREATE TABLE chanpinb(
cid INT ,
cname VARCHAR(100),
CONSTRAINT pk_cid PRIMARY KEY(cid)

);
/*
3.在定义完毕表结构后,通过修改表结构方式
格式:
     alter table 表名 add [constraint 主键约束名称] primary key(作为主键的字段名称)
     注意:
         []里面的内容是可以省略的,如果要写,不能只写个[]
         []: 代表的是,里面的内容,作为可选项
*/

#创建分类表chanpind
CREATE    TABLE chanpind(
     cid INT,
     cname VARCHAR(100)
);

ALTER TABLE chanpind ADD CONSTRAINT fk_cid PRIMARY KEY(cid);

/*
删除主键约束:
格式:
alter table 表名 drop primary key;
*/
ALTER TABLE chanpind DROP PRIMARY KEY;
DESC chanpind;

/*
非空约束: not null
     可以有多个
*/
/*
创建car表
id int 编号
color varchar(100) 颜色
brand varchar(100) 品牌
price int 价格
*/
CREATE TABLE car(
id INT PRIMARY KEY AUTO_INCREMENT,
color VARCHAR (100),
brand VARCHAR(100),
price INT
);
#以上的color,brand,price 没有非空约束
#添加非空约束的两种方式
#1.定义表结构时,字段名后面+not null
DROP TABLE car;
CREATE TABLE car (
     id INT PRIMARY KEY AUTO_INCREMENT,
     color VARCHAR(100) NOT NULL,
     brand VARCHAR(100) NOT NULL,
     price INT
);

#2.通过修改表结构的方式:ALTER TABLE 表名 MODIFY 字段名 类型(长度) 约束
ALTER TABLE car MODIFY price INT NOT NULL;

#注意:取消非空约束
ALTER TABLE car MODIFY price INT ;
DESC car;

/*
唯一约束: unique
     一个表可以有多个    
*/

#添加唯一约束的三种方式:
#1.在定义表结构时,作为唯一约束的字段后面+unique
#删除表
DROP TABLE car;
#创建分类表car
CREATE TABLE car (
cid INT PRIMARY KEY AUTO_INCREMENT ,
cname VARCHAR (100) UNIQUE
);

#2.在定义表结构时,已经指定了所有的字段,在最后使用constraint关键字,添加唯一约束
/*格式:
     [constraint 唯一约束名称] unique(作为唯一的字段名称)
     注意:
         []里面的内容是可以省略的,如果要写,不能写[]
         []: 代表的是,里面的内容,作为可选项
*/
#删除表
DROP TABLE car;
#创建分类表car
CREATE TABLE car (
cid INT PRIMARY KEY AUTO_INCREMENT ,
cname VARCHAR (100) ,
CONSTRAINT un_cname UNIQUE (cname)
);

#3.在定义完毕表结构后,通过修改表结构方式
/*格式:
         alter table 表名 add [constraint 唯一约束名称] unique(作为唯一约束的字段名称)
         注意:
             []里面的内容是可以省略的,如果要写,不能写[]
             []: 代表的是,里面的内容,作为可选项
*/
#删除表
DROP TABLE car;
#创建分类表category
CREATE    TABLE car(
     cid INT,
     cname VARCHAR(100)
);
#通过修改表结构方式,添加唯一约束
ALTER TABLE car ADD CONSTRAINT qun_cname UNIQUE(cname);
#删除唯一约束的两种方式
/*1.删除唯一约束:
     格式:
     alter table 表名 drop index 字段名或者唯一约束名;
     如果指定了唯一约束名称,则必须通过唯一约束名称,来删除唯一约束
*/
ALTER TABLE car DROP INDEX qun_cname ;

/*2.删除唯一约束:
     格式:
     alter table 表名 drop index 字段名或者唯一约束名;
     如果没有指定唯一约束名称,则必须通过字段名称删除唯一约束
*/
#给cname添加唯一约束
ALTER TABLE car ADD CONSTRAINT UNIQUE (cname);
#通过字段名,删除该字段上具有的唯一约束
ALTER TABLE car DROP INDEX cname;

 


posted on 2019-05-08 17:53  少年攻城狮  阅读(250)  评论(0编辑  收藏  举报

导航