JavaWeb基础知识总结. (33)

例如在t_section表中sid为1的记录说明有一个分类叫java,版主是t_user表中uid为1的用户,即zs!

例如在t_topic表中tid为2的记录是名字为“Java是咖啡”的帖子,它是java版块的帖子,它的作者是ww。

外键就是用来约束这一列的值必须是另一张表的主键值!!!

l 创建t_user表,指定uid为主键列:

CREATE TABLE t_user(

uidINT PRIMARY KEY AUTO_INCREMENT,

unameVARCHAR(20) UNIQUE NOT NULL

);

l 创建t_section表,指定sid为主键列,u_id为相对t_user表的uid列的外键:

CREATE TABLE t_section(

sidINT PRIMARY KEY AUTO_INCREMENT,

snameVARCHAR(30),

u_idINT,

CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid)

);

l 修改t_section表,指定u_id为相对t_user表的uid列的外键:

ALTER TABLE t_section

ADD CONSTRAINT fk_t_user

FOREIGN KEY(u_id)

REFERENCES t_user(uid);

l 修改t_section表,删除u_id的外键约束:

ALTER TABLE t_section

DROP FOREIGN KEY fk_t_user;

6 表与表之间的关系

l 一对一:例如t_person表和t_card表,即人和身份证。这种情况需要找出主从关系,即谁是主表,谁是从表。人可以没有身份证,但身份证必须要有人才行,所以人是主表,而身份证是从表。设计从表可以有两种方案:

Ø 在t_card表中添加外键列(相对t_user表),并且给外键添加唯一约束;

Ø 给t_card表的主键添加外键约束(相对t_user表),即t_card表的主键也是外键。

l 一对多(多对一):最为常见的就是一对多!一对多和多对一,这是从哪个角度去看得出来的。t_user和t_section的关系,从t_user来看就是一对多,而从t_section的角度来看就是多对一!这种情况都是在多方创建外键!

l 多对多:例如t_stu和t_teacher表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系。例如再创建一张表t_stu_tea表,给出两个外键,一个相对t_stu表的外键,另一个相对t_teacher表的外键。

编码 1 查看MySQL编码

SHOW VARIABLES LIKE \'char%\';

wps8C87.tmp

因为当初安装时指定了字符集为UTF8,所以所有的编码都是UTF8。

l character_set_client:你发送的数据必须与client指定的编码一致!!!服务器会使用该编码来解读客户端发送过来的数据;

l character_set_connection:通过该编码与client一致!该编码不会导致乱码!当执行的是查询语句时,客户端发送过来的数据会先转换成connection指定的编码。但只要客户端发送过来的数据与client指定的编码一致,那么转换就不会出现问题;

l character_set_database:数据库默认编码,在创建数据库时,如果没有指定编码,那么默认使用database编码;

l character_set_server:MySQL服务器默认编码;

l character_set_results:响应的编码,即查询结果返回给客户端的编码。这说明客户端必须使用result指定的编码来解码;

2 控制台编码

修改character_set_client、character_set_results、character_set_connection为GBK,就不会出现乱码了。但其实只需要修改character_set_client和character_set_results。

控制台的编码只能是GBK,而不能修改为UTF8,这就出现一个问题。客户端发送的数据是GBK,而character_set_client为UTF8,这就说明客户端数据到了服务器端后一定会出现乱码。既然不能修改控制台的编码,那么只能修改character_set_client为GBK了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfdw.html