黑马程序员——day11SQL

来源:互联网 发布:博客优化站 编辑:程序博客网 时间:2024/06/06 12:46

               今天讲了SQL,感觉还行,大学里学过,虽然没好好学,还是有些印象的,让我回忆起当时那个教我数据库的老师,读书郎。我发现我们珽哥的一生真是一段段传奇故事编织的,他给我们讲了他高中的故事,从一个垫底还被学校开除过的到最后前进30多名的故事,讲的挺搞笑的。

             今天的东西也挺简单的,就概念比较多。

             约定:
shell>window下命令
mysql>进入mysql之后的命令或关键字(关键字统一使用大写)

一、SQL简介
1、SQL:Structured Query Language结构化查询语言。
与数据数据交互。
2、ANSI维护的标准的SQL语句包含以下部分:
*DQL:数据查询语言
*DML:数据操作语言
*DDL:数据定义语言
DCL:数据控制语言
*TPL:事务处理语言
CCL:指针控制语言
Tips:
不同的数据库厂商都支持标准的SQL,但都在此基础上进行扩展:
Oracle:PLSQL 方言
SQL-Servlet:TSQL 方言


3、验证MySQL是否安装成功
通过客户端程序进入mysql
shell>mysql [-h 主机的名称或IP] -u[ ]用户名 -p[密码]


进入数据库
shell>mysql -u root -p
如果看到mysql>提示符,证明木有问题。
查看默认的数据库有哪些
mysql>SHOW DATABASES;


二、SQL语句
1、DDL:Data Definition Language数据定义语言
作用:用于描述数据库中要存储的现实世界实体的语言。即创建数据库和表的结构。
关键字:CREATE(创建) ALTER(修改) DROP(删除) TRUNCATE 操作的对象:数据库、表结构等
------------------------------------------
查看MySQL支持的字符集
mysql>SHOW CHARACTER SET;
创建一个名称为mydb1的数据库。
mysql>CREATE DATABASE mydb1;
查看数据库的创建细节
mysql>SHOW CREATE DATABASE mydb1; 
创建一个使用gbk字符集的mydb2数据库。
mysql>CREATE DATABASE mydb2 CHARACTER SET gbk;
创建一个使用gbk字符集,并带校对规则的mydb3数据库。 
mysql>CREATE DATABASE mydb3 CHARACTER SET gbk COLLATE gbk_chinese_ci;
查看当前数据库服务器中的所有数据库
mysql>SHOW DATABASES;
查看前面创建的mydb2数据库的定义信息
mysql>SHOW CREATE DATABASE mydb2;
删除前面创建的mydb3数据库
mysql>DROP DATABASE mydb3;
查看服务器中的数据库,并把mydb2的字符集修改为utf8;
mysql>ALTER DATABASE mydb2 CHARACTER SET utf8;
------------------------------------------
在某个数据库中创建表前,先选择该数据库
mysql>USE test;
创建一个员工表
mysql>CREATE TABLE employee(
id int PRIMARY KEY,
name varchar(100),
gender varchar(10),
birthday date,
entry_date date,
job varchar(100),
salary float(8,2)
);
查看test数据库中的所有的表格
mysql>SHOW TABLES;
在上面员工表的基本上增加一个image列。
mysql>ALTER TABLE employee ADD image longblob;
查看表的列明细
mysql>DESC employee;
修改job列,使其长度为60。
mysql>ALTER TABLE employee MODIFY job varchar(60);
删除image列。
mysql>ALTER TABLE employee DROP image;
表名改为user。
mysql>RENAME TABLE employee TO user;
查看表格的创建细节
mysql>SHOW CREATE TABLE user;
修改表的字符集为utf-8
mysql>ALTER TABLE user CHARACTER SET utf8;
列名name修改为username
mysql>ALTER TABLE user CHANGE name username varchar(100);


2、DML:Data Manipulation Language 数据操作语言
作用:用于向数据库表中插入、删除、修改数据。操作对象是表中的记录。
关键字:INSERT DELETE UPDATE

字符和日期型数据应包含在单引号中。
使用insert语句向user表中插入三个条记录
(不建议)mysql>INSERT INTO user VALUES(1,'najie','female','1989-09-08','2013-01-12','CEO',30000.00);
(建议)mysql>INSERT INTO user (id,username,gender,birthday,entry_date,job,salary) VALUES(2,'zhege','male','1987-09-08','2013-01-12','CTO',20000.00);
mysql>INSERT INTO user (id,username,gender,birthday,entry_date,job,salary) VALUES(3,'古银平','male','1990-07-08','2013-01-12','UFO',50000.00);
DOS窗口默认是GBK编码,数据库存储UTF8编码,编码不一致,报“数据太长”错误
解决办法:通知数据库,客户端提交的数据的编码类型。数据库会自动解码(GBK)后重新编码(UTF8)
--------------------------------
数据库的编码:
client是客户端使用的字符集。 
connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。       
database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。    
results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。       
server是服务器安装时指定的默认字符集设定。       
system是数据库系统使用的字符集设定。
显示数据库中的各种编码:
mysql>SHOW VARIABLES LIKE 'character%';
更改其中的编码:(只对当前窗口有效)
mysql>SET character_set_client=gbk;
mysql>SET character_set_results=gbk;
--------------------------------

查看表中的所有数据(DQL)
mysql>SELECT * FROM user;

将所有员工薪水修改为5000元。
mysql>UPDATE user SET salary=5000;
将姓名为’zhege’的员工薪水修改为3000元。
mysql>UPDATE user SET salary=3000 WHERE username='zhege';
将姓名为’古银平'的员工薪水修改为4000元,job改为CMO。
mysql>UPDATE user SET salary=4000,job='CMO' WHERE username='古银平';
将najie的薪水在原有基础上增加1000元。
mysql>UPDATE user SET salary=salary+1000 WHERE username='najie';

删除表中名称为’zhege’的记录。
mysql>DELETE FROM user WHERE username='zhege';
删除表中所有记录。
mysql>DELETE FROM user;(一条一条的删除)
使用truncate删除表中所有记录。
mysql>TRUNCATE user;(摧毁整张表,然后重建表结构)


3、DQL:Data Query Language数据查询语言(简单-单表操作)
作用:查询数据。
常用关键字:SELECT
(表数据参见PPT27页内嵌的文本)
查询表中所有学生的信息。
mysql>SELECT * FROM student;(不建议)
mysql>SELECT id,name,chinese,english,math FROM student;
查询表中所有学生的姓名和对应的英语成绩。
mysql>SELECT name,english FROM student;
过滤表中英语重复数据。
mysql>SELECT DISTINCT english FROM student;
在所有学生英语分数上加10分特长分。
mysql>SELECT name,english+10 FROM student;
统计每个学生的总分。
mysql>SELECT name,(chinese+english+math) FROM student;
使用别名表示学生分数。
mysql>SELECT name AS 姓名,(chinese+english+math) 总分 FROM student;
查询姓名为王五的学生成绩
mysql>SELECT * FROM student WHERE name='王五';
查询英语成绩大于90分的同学
mysql>SELECT * FROM student WHERE english>90;
查询总分大于200分的所有同学
mysql>SELECT name,(chinese+english+math) FROM student WHERE (chinese+english+math)>200;

Tips:WHERE后面支持表达式运算,但是不能使用合计函数。
WHERE后面的逻辑运算必须返回true或false。只有为true时才执行查询。

查询英语分数在 80-90之间的同学。
mysql>SELECT * FROM student WHERE english BETWEEN 80 AND 90;(含头也含尾)
查询数学分数为89,90,91的同学。
mysql>SELECT * FROM student WHERE math IN (89,90,91);
查询所有姓李的学生成绩。
mysql>SELECT * FROM student WHERE name LIKE '李%';
查询数学分>80,语文分>80的同学。
mysql>SELECT * FROM student WHERE math>80 AND chinese>80;

对数学成绩排序后输出。
mysql>SELECT id,name,math FROM student ORDER BY math;(默认是升序)
对总分排序后输出,然后再按从高到低的顺序输出
mysql>SELECT id,name,(chinese+english+math) FROM student ORDER BY (chinese+english+math) DESC;
对姓李的学生语文成绩排序输出
mysql>SELECT id,name,chinese FROM student WHERE name LIKE '李%' ORDER BY chinese DESC;


三、数据完整性
数据完整性是为了保证插入到数据中的数据是正确的,它防止了用户可能的输入错误。
1、实体完整性:
规定表的一行(即每一条记录)在表中是唯一的实体。实体完整性通过表的主键来实现。
关键字:PRIMARY KEY
主键特点:唯一且不能为null。

主键:
(建议)逻辑主键:与具体业务无关。int id。
业务主键:有实际意义。身份证号。
自动增长:数据库自定管理主键的值。(开发中应该由自己的应用程序维护的主键,而不应该由数据库维护)
MySQL:AUTO INCREMENT
Oracle没有自动增长的主键。

2、域完整性
指数据库表的列(即字段)必须符合某种特定的数据类型或约束。
约束:
NOT NULL:必须输入
UNIQUE:唯一

*3、参照完整性
保证一个表的外键和另一个表的主键对应。
CREATE TABLE t1(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(100) NOT NULL,
idcardnum varchar(100) UNIQUE
);
INSERT INTO t1 (name,idcardnum) VALUES('najie','010');

原创粉丝点击