SQL 之增删改 &约束条件 &表操作&库操作

SQL 基本增删改操作 约束条件的操作 对表/库的操作

一、基本增删改

(一)、向表中插入数据

语法:

insert into 表名(字段名,字段名) values(值,值)

/*注意:
1.数据每次插入都是按行插入
2.不能为空的字段,必须插入值
3.插入的值的类型要和字段类型一致
4.字段的个数要与插入的值的个数保持一致
5.字符型或日期型的 值,要用''引起来
   数值型,不用单引号
6.插入的数据要遵循表中设置的约束(外键、主键、唯一、默认)
否则插入失败
*/

1.演示 :向users表中插入一条记录

INSERT INTO users (id,NAME,sex,email,borndate)
VALUES(3,'小花','男女是否更好','[email protected]','2010-9-9');    

2.向可以为空的列插入null值

方式一://可以不添加值允许为空的字段
    INSERT INTO users (id,NAME,sex,email)
    VALUES(6,'小丽','男','[email protected]');  

方式二://可以显示的添加字段 并直接插入值为null
    INSERT INTO users (id,NAME,sex,email,borndate)
    VALUES(7,'小顺','男','[email protected]',NULL);

3:如果插入的是全部列的话,所有列名可以省略

INSERT INTO users
VALUES(800,'小顺','男','[email protected]',NULL)

//插入时要注意:
//应对应所有位置插入所有字段值
INSERT INTO users(id,NAME,sex,email,borndate)
VALUES(9,'小顺','女','[email protected]',NOW())   

(二)、修改

语法:

update 表名 set 列名=新值,列名=新值 where 条件

UPDATE users SET sex='男' WHERE NAME = '张三';

案例:修改 1-6号的 用户的性别 为 ‘女’,生日 为 今天

UPDATE users SET sex='女',borndate=NOW()
WHERE id BETWEEN 1 AND 6;

(三)、删除

1、语法:

方式一:

delete from 表 where 条件

方式二:
truncate table 表

二者的区别:

delete 可以加条件,truncate不能加条件
truncate 删除的是表中所有数据,效率比较高,清空日志文件

案例:删除生日为null的用户

DELETE FROM users WHERE borndate IS NULL;

二、数据库的事务(表面的认识性了解 详细事务后期专门解析)

/*
事务:数据库区分于其他文件系统的一种形式
目的:保证数据库的数据从一种状态到另一种状态,数据是完整的!!

数据完整性:数据的准确和可靠性

账户编号  余额
张   1000
李   1000

update 表 set 余额=1000-500  where 账户编号=张
意外
update 表 set 余额=1000+500  where 账户编号=李

账户编号  余额
张   500
李   1000


特点:ACID 
    原子性 :一个事务中的所有语句是一个整体  不可再分割
        要么都执行,要么都不执行

    一致性:数据的状态保证完整性

    隔离性:一个事务和其他事务之间是互不干扰的,相互隔离的

    永久性:一个事务提交成功后,持久化到本地

分类:
    隐式事务:没有明确的开始和结束标记
        一条insert、update、delete
    显式事务:有明确的开始和结束标记

        希望多条sql语句 要么都执行,要么都不执行
*/

例如:

SELECT * FROM users;
DELETE FROM users;  

取消自动提交
SET autocommit=0;

开启事务
START TRANSACTION;

INSERT INTO users(id,NAME,sex,email,borndate)
    VALUES(1,'小顺1','女','[email protected]',NOW()) ;    
INSERT INTO users(id,NAME,sex,email,borndate)
    VALUES(2,'小顺2','女','[email protected]',NOW()); 

INSERT INTO users(id,NAME,sex,email,borndate)
    VALUES(3,'小顺3','女','[email protected]',NOW()); 
INSERT INTO users(id,NAME,sex,email,borndate)
    VALUES(4,'小顺4','女','[email protected]',NOW()); 
INSERT INTO users(id,NAME,sex,email,borndate)
    VALUES(5,'小顺5','女','[email protected]',NOW()); 

ROLLBACK; //此处用回滚ROLLBACE所以以上sql不会成功

结束事务(commit提交 、rollback回滚)


★三、约束条件的操作

(一)经常使用的约束条件

/*

NOT NULL     非空约束,规定某个字段不能为空
UNIQUE       唯一约束,规定某个字段在整个表中是唯一的
PRIMARY KEY  主键(非空且唯一) ★
FOREIGN KEY  外键
CHECK        检查约束(Mysql)
DEFAULT      默认值
auto_increment  自增长(此处只是呈现 不是约束条件)

*/

★约束条件 唯一 UNIQUE

unique(和主键区分)
   1、一个表可以有多个唯一
   2、可以为空
   3、唯一键的值不能重复

★ 主键 primary key 
   1、一个表最多有一个主键
   2、必须是非空
   3、主键列的值不能重复

自增长(不算约束)

auto_increment
1、设置成自增长的列只能是 int类型
2、值不用手动插入
3、一个表最多有一个自增长列

(二)测试约束 UNIQUE

1 唯一约束 可以为空

//如果给最后字段添加唯一约束测试如下

INSERT INTO stuinfo VALUES(1,'john1','男',4);  //可以

INSERT INTO stuinfo VALUES(3,'john2','男',5);  //可以

INSERT INTO stuinfo VALUES(4,'john3','男',5);  //不可以

INSERT INTO stuinfo VALUES(5,'john4','男',6);  //可以

INSERT INTO stuinfo VALUES(6,'john5','男',6);  //不可以

3 外键约束

/*
1.设置外键的表称为 从表,被引用的表称为主表
2.从表中的列值 必须来自于主表的关联列
3.插入数据,要先插入主表,再插入从表
  删除数据,要先删除从表,再删除主表

4.添加外键时
    情况一:删除主表被引用的数据时,删不掉 
    情况二:删除主表被引用的数据时,从表关联的数据也随之删除
           on delete cascade
    情况三:删除主表被引用的数据时,从表关联的数据置null
           on delete set null
5.主表和外表的关联列要求 类型必须一致,名称没有要求
6.主表的类要求 必须是主键

*/

例如:
//stuinfo是主表表 并且被其他表引用了值

    DELETE FROM stuinfo; //删除失败
    SELECT * FROM major;  //从表中结果不变

例如: 删除从表major的id 为6的记录

   DELETE FROM major  WHERE majorid = 6;//删除失败

(三)、创建表时,添加约束

/*

列级约束:约束直接追加到字段的后面
    not null
    unique
    primary key
    外键(不起作用,语法不报错)

表级约束 CONSTRAINT:约束不是直接追加到某指定字段的后面   
    而是所有字段的下面
    unique
    primary key
    外键

注意:
非空约束和默认值 只能添加 列级约束
外键只能添加表级约束才起作用,列级约束 不起作用

*/

1 列级约束

CREATE TABLE stuinfo(
id INT NOT NULL PRIMARY KEY,
NAME VARCHAR(20)  NOT NULL UNIQUE,
sex CHAR(1) DEFAULT '男',
majorid INT NOT NULL REFERENCES major(majorid)
)

INSERT INTO stuinfo VALUES(1,'john','女',1);

INSERT INTO stuinfo VALUES(1,'lu',DEFAULT,30);//因为主键约束 插入失败

2 表级约束

CREATE TABLE stuinfo(
id INT NOT NULL ,
NAME VARCHAR(20)  NOT NULL ,
sex CHAR(1) DEFAULT '男',
majorid INT NOT NULL ,

CONSTRAINT pk PRIMARY KEY(id),//添加主键约束
CONSTRAINT fk FOREIGN KEY (majorid) REFERENCES major(majorid),//添加外键约束
CONSTRAINT uq UNIQUE(NAME)//添加唯一约束

)

(四)、删除约束
/*

alter table 表名  drop 约束类型  约束名;
*/

4-1 删除主键

ALTER TABLE 表名 DROP PRIMARY KEY;

4-2 删除外键

ALTER TABLE 表名 DROP FOREIGN KEY fk_major_stuinfo;

4-3 删除唯一键

ALTER TABLE 表名 DROP INDEX uq_stuinfo;

4-4 删除 非空约束

ALTER TABLE 表名 MODIFY majorid INT ;

(五)、添加约束

/*

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

*/

//添加列及约束

CREATE TABLE stuinfo(
id INT NOT NULL ,
NAME VARCHAR(20)  NOT NULL ,
sex CHAR(1) ,
majorid INT 
)

5-1 添加 主键
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(id);

5-2 添加唯一

ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(`name`);

5-3 添加外键

ALTER TABLE 表名 ADD CONSTRAINT 约束名
FOREIGN KEY (majorid) REFERENCES major(majorid) ON DELETE SET NULL;


四、对表/库的操作

DDL 数据定义语言

/*

create 创建
alter 修改
drop 删除

*/

(一)、数据库的操作

1.创建数据库
CREATE DATABASE stu;

2.删除数据库
DROP DATABASE stu;


3.查看当前连接下的所有数据库
SHOW DATABASES;

(二)、数据表的操作

1.创建数据表

/*
create table 表名(
字段名1 字段类型 [长度] [约束] ,//中括号里有时候可以没有 看情况
字段名2 字段类型 [长度] [约束] ,
...
字段名n 字段类型1 [长度] [约束]
);

注意:varchar和char类型要求必须添加长度

*/

例如:

CREATE TABLE student(
studentNo VARCHAR(20) NOT NULL,
studentName VARCHAR(20) NOT NULL,
sex CHAR(2),
gradeId INT NOT NULL,
borndate DATETIME NOT NULL

//注意 最后一行没有逗号
);

2 修改表的结构

2-1 添加列

ALTER TABLE student ADD COLUMN email VARCHAR(20);


2-2 删除列
ALTER TABLE student DROP COLUMN email;


2-3 修改列(类型)

ALTER TABLE student MODIFY COLUMN studentNo INT ;


2-4 修改表名

ALTER TABLE student RENAME TO stuinfo;

2-5 修改列名
ALTER TABLE stuinfo CHANGE sex gender CHAR(2);

3查看表的结构

DESC stuinfo;

4 删除表

DROP TABLE stuinfo;

5 表的复制

方式一:仅仅复制表结构

CREATE TABLE student4 LIKE student;

方式二:复制表的结构和数据

CREATE TABLE student3  SELECT * FROM student 【WHERE 条件 】;

你可能感兴趣的:(SQL,数据库)