设计表逻辑--表关联
首先学习如何有逻辑地设置一套表系统
举例说明:
表一
序号 学号 日期1 日期2
1 kb2101 出勤 缺勤
2 kb2102 出勤 出勤
.. .... ... ...
关联姓名信息,展示姓名的详细信息(依赖关系:表一中学号列信息依赖于表二)
表二
学号 姓名 课程 身份证号
kb2101 张三 大数据 320xxxxxxx
kb2102 李四 Java 320xxxxxxx
... .... .... ..........
主键约束
primary key 主键唯一不重复,表示该字段是该表的唯一标识,例如:上述案例中学生的学号能唯一确定一名学生,可设置为主键.(并可以设置成自增列)
primary key 可以直接跟在字段后面也可以在字段写完后添加在最后;举例
mysql>create table if not exists `newallstu` (`stuno` int(10) auto_increment,`stuname` varchar(255), primary key(`stuno`) );等同于mysql>create table if not exists `newallstu` (`stuno` int(10) primary key auto_increment,`stuname` varchar(255) );
外键约束
用于在两表间建立关系,需要指定引用主表的哪一个字段,在插入或更新表的数据时,数据库将自动检查更新的字符值是否符合外键约束的限制,如果不符合约束要求,则更新将会失败
注意
1)InnoDB支持外键但MyISAM不支持,
2)作为外键的字段要求在主表中是主键(单字段主键)
自动递增
auto_incremen
设置该列为自增字段.,默认每条自增1;
通常用来设置主键,且为整数类型;
可设置初始值和步长;
举例
create table `student`(studentno int(10) primary key auto_increment,loginpwd varchar (20) ,studentname varchar (20) ,sex int(1) ,gradeid int (10),phone varchar (50) ,address varchar (255),borndate datetime ,email varchar (50),identitvcard varchar (18) ,
constraint FK_gradeid foreign key (gradeid) references grade(grideid));
其中gradeid依赖于表gradeid,使用constraint FK_gradeid foreign key (gradeid) references grade(grideid));进行外键关联.
注意
使用外键关联的字段在alter操作中会禁用修改该字段名或者删除等操作,必须先解开外键关联,才能对该列名(change/drop)操作,否则就会修改或者删除不成功,所以在未来工作中,主外键关联很少用到,会增加调试工作难度.
删除外键操作
alter table 表名 drop foreign key FK_外键名;
查找表信息
一般查询表的操作
select * from table ;(不推荐)
select t.name ,t.age from table as t;(起别名,方便table.fields(列表的列字段)的查询,起别名可以省略as 替换成空格)
等效于 select name ,age from table ;(不起别名)
select t.name as n,t.age as a from table as t;等效于select t.name n,t.age a from table t;(省略as)
等效于 select name as n,age as a from table ;(省略别名)
常用where语句
where语句后面加的都是真假判断(逻辑运算结果为真则输出为假则过滤掉)
逻辑判断条件用and或or连接;
举例
mysql> select * from result where studentno=1002 and subjectno=2;
mysql> select * from result where studentno=1002 or subjectno=2;
mysql> select * from result where studentresult<=90 and studentresult>=80;
mysql> select * from result where studentresult between 80 and 90;(between包含边界)
逻辑关系符号运算(基本同java逻辑判断,除了"="号和"=="的区别.java"=="是逻辑判断符号)
mysql> select * from result where studentresult!=100 && subjectno=1;
is null和is not null;
mysql> select * from teacher where name is not null;
mysql> select * from teacehr where name is null;
like关键词和%和_的用法
搜索词%(表示以搜索词开头)
%搜索词(表示以搜索词结尾)
%搜索词%(表示搜索词在中间)
搜索词_(精确查找,一个"_"代表一个字符)
in关键词用法
in(匹配对象)
select score from result where score in (90,95,100);