我爱Java系列之《JavaEE学习笔记day16》---【mysql基础&约束】

版权声明:版权所有,非法用途必究! https://blog.csdn.net/weixin_44988127/article/details/89965454

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;

猜你喜欢

转载自blog.csdn.net/weixin_44988127/article/details/89965454