外键(了解)
1第一种方法数据库(总)`grade`与数据库(分)`student`关联,加一个外键
CREATE TABLE IF NOT EXISTS `grade`( `gradeid` INT(4) NOT NULL AUTO_INCREMENT COMMENT'年纪id', `gradename` VARCHAR(3) NOT NULL COMMENT'年纪名称', PRIMARY KEY(`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8 CREATE TABLE IF NOT EXISTS`student`( `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT'学号', `name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名', `sex` VARCHAR(2) DEFAULT'男' COMMENT'性别', `gradeid` INT(4) NOT NULL COMMENT'学生的年级', `age` INT(3) DEFAULT NULL COMMENT'年纪', `pwd` VARCHAR(6) NOT NULL DEFAULT'123456' COMMENT'密码', `address` DATETIME DEFAULT NULL COMMENT'出生日期', `email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱',-- DEFAULT NULL默认为空,和NOT NULL会冲突 PRIMARY KEY(`id`)-- 主键 key `FK_gradeid`(`gradeid`),-- 定义外键key constraint `FK_gradeid` foreign key(`gradeid`)references `grade`(`gradeid`) -- 给这个外键添加约束(执行引用)references引用 )ENGINE=INNODB DEFAULT CHARSET=utf8-- ENGINE引擎,CHARSET字符集
2.第二种方法先把两个库创建了,在关联
CREATE TABLE IF NOT EXISTS `grade`( `gradeid` INT(4) NOT NULL AUTO_INCREMENT COMMENT'年纪id', `gradename` VARCHAR(3) NOT NULL COMMENT'年纪名称', PRIMARY KEY(`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8 CREATE TABLE IF NOT EXISTS`student`( `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT'学号', `name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名', `sex` VARCHAR(2) DEFAULT'男' COMMENT'性别', `gradeid` INT(4) NOT NULL COMMENT'学生的年级', `age` INT(3) DEFAULT NULL COMMENT'年纪', `pwd` VARCHAR(6) NOT NULL DEFAULT'123456' COMMENT'密码', `address` DATETIME DEFAULT NULL COMMENT'出生日期', `email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱',-- DEFAULT NULL默认为空,和NOT NULL会冲突 PRIMARY KEY(`id`)-- 主键 )ENGINE=INNODB DEFAULT CHARSET=utf8-- ENGINE引擎,CHARSET字符集 ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`);
以上两种方法都是物理外键,数据库级别的外键,不推荐,了解即可,以后看到知道是什么意思就可,因为删不掉主数据库,因为要先删掉关联的数据库,太多数据库就很麻烦
最佳实践
数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
我们想使用多张的数据,想使用外键(程序去实现)
=====重要=====
添加
-- 插入语句(添加)
-- insert into 表名([字段名1,字段2,字段3])values('值1'),('值2'),('值3'),。。。
INSERT INTO `student`(`name`,`age`,`pwd`,`gradeid`)
VALUES('张三','13','654123','1'),
('李四','18','aaaa','2')
-- 修改,
-- update 表名 set 要修改的属性[至少一个](用逗号隔开) where 条件;
UPDATE `student`SET `sex`='女',`pwd`='vvv'WHERE `name`='李四';
条件:where子句运算符id等于某个值,大于某个值,在某个区间修改。。。
操作符会返回布尔值
操作符 | 含义 | 范围 | 结果 |
= | 等于 | 5=6 | false |
<>或!= | 不等于 | 5<>6 | true |
> | |||
< | |||
<= | |||
>= | |||
BETWEEN...AND... | 在某个范围内 | [2,5] | 2,3,4,5 |
AND | 我和你&& | 5>1and1>2 | false |
OR | 我或者你|| | 5>1or1>2 | true |
-- update 表名 set colnum_name = value [至少一个](用逗号隔开) where 条件;
colnum_name===是数据库的列,尽量带上
条件不指定,会修改所有的列
value 是一个具体的值,也可以是一个变量(不能是函数)
UPDATE `student`SET`address`= CURRENT_TIME,`age`= `id` WHERE `name`='李四';
---- CURRENT_TIME现在的时间,
删除
delete命令
语法:delete from表名[where 条件]
-- 删除数据(避免这样写,会全部删除)
DELETE FROM `student`
-- 删除指定数据
DELETE FROM `student`WHERE id=1;
truncate命令
作用:完全清空一个数据库表,表的结构和索引约束不会变!
-- 测试delete 和truncate 区别
CREATE TABLE `test`(
`id`INT(4) NOT NULL AUTO_INCREMENT COMMENT'号码',
`coll`VARCHAR(20) DEFAULT NULL COMMENT'匿名',
PRIMARY KEY (`id`)
)ENGINE=INNOBASE DEFAULT CHARSET=utf8
INSERT INTO `test`(`coll`)
VALUES ('a'),('s'),('d'),('g')
DELETE FROM `test`-- 不会影响自增
TRUNCATE TABLE `test`--v自增会归零
了解
DELETE删除的问题,重启数据库,现象
innoDB 自增列会从1开始(存在内存当中的,断电即失)
MYISAM 继续从上一个自增量开始(存在文件中,不会丢失)
本文来自博客园,作者:阿霖找BUG,转载请注明原文链接:https://www.cnblogs.com/lin-07/articles/16215656.html