MySql数据库(基础)

来源:互联网 发布:office 2011 mac 编辑:程序博客网 时间:2024/06/08 19:48

学习数据库,我觉得关键在于记住相关的英文单词。把自己比较陌生的写下来,便于记忆

查询表结构(desc +表名)

修改表头字段都是(alter table...开头)

给创建好的表添加地址字段,例如给学生表添加gender varchar(2)字段

alter table student add column gender varchar(2)

修改gender字段值为varchar(3)

-------------------------modify column gender varchar(3)

将gender字段改为sex字段值为varchar(2)

-------------------------change column gender sex varchar(2)

删除gender字段

--------------------------drop column gender

查看表的数据(select+字段名字+from student;如果查看所有表 select *from+表名)

按条件查询,只需要在后面加上where+条件

例如查询age字段为null的学生(is null):select*from student where age is null

查询指定别名:select name '姓名' from student

合并两项查询例如合并servle和jsp的成绩 (只能合并数值类型的字段):select (servle+jsp)'总成绩' from student

去除重复值查询,例如有几个学生来自同一个地方,但是只想让这个地方名字只显示一次:

select distinct address from student

-- 查询address字段不为''的学生(<>'')-- 查询SELECT * FROM student WHERE address<>'';

聚合函数

查询某个字段的(总和,平均分,最大,最小)值:select sum(字段名)fom student

排序,例如,按照字段升序asc(降序 desc)排序:select*from student order by id desc

给数据表中插入元素(insert into+表名开头)

插入所有字段:insert into student values(...填入相应的值)

插入某个字段:insert into student(id,name)values(1,郭德纲)

修改表内元素值(update+表名)

将所以学生年龄修改为50:update student set age=50

将id=1的学生名字改为小明年龄改为40:------------------set name='小明',age=40 where id=1

删除数据(delete from)

删除所以表元素:delete from student  (本质上是一条条删,效率比较慢。无法重置自增长主键)

------------------------truncate table student(将全表数据直接删除,效率高。可以重置自增长主键)

删除id为1的数据:-------------------------where id=1

数据约束(当给这个字段没有添加值的时候,会给一个默认值,如果给默认值约束的字段添加的值为null的时候,那么他的字段值就为null)

默认值约束(default)例如在创建学生表时gender varchar(20)default '男'  (就是给性别默认为男,如果在添加元素时没有给出gender值,就默认为 男

非空约束(not null),插入的字段不为null,而且必须插入数据:id int not null

 唯一约束(unique)

当我们给id字段设置了主键约束后,这个id字段就非空+唯一了(PRIMARY KEY)

自增长约束(auto_increment)

主键自增长(PRIMARY KEY AUTO_INCREMENT)设置主键自增长约束,我们其实就将id这个字段交给了数据库自己去维护,我们自己不需要去动他

外键约束:CONSTRAINT emp_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)
声明      外键名称           外键            字段            依赖于         那张表的那个字段

1.给副表中插入主表中不存在的数据的时候,外键起作用
 2.当将副表中的数据改为主表中不存在的数据的时候,外键起作用
 3.当我们删除附表中还在使用的主表中的数据的时候,外键起作用

当我们有了外键之后,我们该怎么去操作数据库呢
1.插入数据的时候,先插入主表,再插入副表

 2.当我们修改副表中的数据的时候,先修改主表

3.删除主表数据的时候,先得将副表中的数据删除干净,再去删除主表中的数据

级联技术:当我们修改或者删除主表的时候,同时能够影响到副表的数据

CONSTRAINT emp_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE
声明      外键名称   外键        字段               依赖于     那张表的那个字段

存储空间和你的查询效率之间是一个矛盾的东西,当你降低了数据的冗余度的时候你的查询效率就会降低
-当数据的存储空间占用的比较大的时候,我们不关心数据冗余这个问题的时候,但是查询效率比较高

多表查询

1.交叉连接查询:SELECT NAME,deptName  FROM employee,dept;

2.内连接查询(用得最多):只有满足连接条件的时候结果才会给予显示:

SELECT e.name,d.deptName
-- 需要查询的表
FROM employee e,dept d
-- 连接条件
WHERE e.deptId=d.id;

-- 内连接另一种写法
SELECT NAME,deptName
FROM employee e
INNER JOIN dept d
ON e.deptId=d.id;

左外连接查询:左表数据满足连接条件就显示满足连接条件的数据,当不满足链接条件的时候显示null
左表和右表的区分:LEFT OUTER JOIN左边的就叫左表,右边的就叫右表
SELECT deptName,NAME
FROM dept d
LEFT OUTER JOIN employee e
ON e.deptId=d.id;

右外连接查询:优先显示右表,如果满足连接条件就显示满足连接条件的数据,如果不满足连接条件就显示null

 存储过程的语法
delimiter $  -- 声明一个结束符
create procedure pro_Test(输入或者输出参数)
begin
带有逻辑的sql语句
end$
根据上面的语法叙述,创建一个不带参数的存储过程,并调用
DELIMITER $
CREATE PROCEDURE pro_Test2()
BEGIN
-- 这里面写sql语句
SELECT * FROM employee WHERE id=2;
END$
-- 调用上面的存储过程
CALL pro_Test2();

 创建一个带有输入参数的存储过程
给存储过程传入员工id查询对应的员工信息
DELIMITER $
CREATE PROCEDURE pro_QueryEmpById(IN eId INT)
BEGIN
SELECT * FROM employee WHERE id=eId;
END$
更改root这个用户名的密码为root
UPDATE USER SET PASSWORD=PASSWORD('root') WHERE USER='root';

原创粉丝点击