MySQL数据库操作
数据保存
数据可以保存在内存、文件、软件,各自的优缺点:
数据保存在内存:
优点: 存取速度快
缺点: 数据不能永远保存!!!
数据保存在文件:
优点: 数据永远保存!!!
缺点: 速度比内存操作慢,频繁的IO操作。查询数据不方便
数据保存在软件:
1)数据永远保存!!!
2)速度比较快
3)查询和管理数据方便
MySQL数据库
开源产品。免费的。与java平台兼容性最好.中小企业(中小应用)
MySql的下载和安装可以网上查找。关于MySQL的可视化界面软件有Navicat for MySQL,SQLyog,可以很方便的进行建数据库和表,以及插入数据。
MySQL的结构:
先有数据库 -> 再有表 ->再有数据
管理数据库
首先看数据库管理软件中有哪些数据库:
SHOW DATABASES;
1. 创建数据库 testdb是创建的数据库名字:CREATE DATABASE 数据库名;如:
CREATE DATABASE testdb;
2. 使用某一个数据库,可以是: use 数据库名;如:
USE testdb;
3. 删除数据库:drop database 数据库名;
DROP DATABASE testdb;
管理数据库中的表(其中大写字母单词是在SQLyog中根据是否为系统关键字设置,大写的为系统默认的关键字)
创建(这里列名就是字段名称,这里为了便于理解,我使用列名表示,习惯了)
create table 表名(列名 类型,列名 类型,……);
如下,创建一个员工staff表:CREATE TABLE staff( id INT, NAME VARCHAR(20), gender VARCHAR(2), email VARCHAR(10), remark VARCHAR(50) );
查看一个表结构:desc 表名; 以表格格式返回
DESC staff;
2. 删除 drop table 表名;
DROP TABLE staff;
3. 修改
alter table 表名 add(change、drop、change) column 列名 (类型视情况而定)
添加列
ALTER TABLE staff ADD COLUMN age INT;
修改列类型
ALTER TABLE staff MODIFY email VARCHAR(50);
修改列名称:这个操作改完之后,再把这一列改为gender;
ALTER TABLE staff CHANGE COLUMN gender sex VARCHAR(4);
ALTER TABLE staff CHANGE COLUMN sex gender VARCHAR(4);
删除列
ALTER TABLE staff DROP COLUMN remark;
修改表名
ALTER TABLE staff CHANGE NAME username VARCHAR(20);
管理数据
查看表的数据
SELECT * FROM staff;
插入数据
INSERT INTO staff(id,username,gender,email,age) VALUES(1,'aaa','w','111@163.com',56); INSERT INTO staff(id,username,gender,age) VALUES(2,'bbb','m',19); INSERT INTO staff VALUES(3,'ccc','w','222@qq.com',34); INSERT INTO staff(id,username,gender) VALUES(4,'ddd','w'); INSERT INTO staff(id,username,gender,age) VALUES(5,'aab','m',23); INSERT INTO staff(id,username,gender) VALUES(6,'eee','w');
修改数据
将所有人的年龄设置为10:UPDATE staff SET age=10;
将id为4的人的性别设置为m:
UPDATE staff SET gender='m' WHERE id=4;
将id为4的员工性别设置为ww,email为email@qq.com:
UPDATE staff SET gender='ww',email='email@qq.com' WHERE id=4;
删除数据
删除staff中的全部数据:DELETE FROM staff;
删除id=6的数据:
DELETE FROM staff WHERE id=6;
删除性别为w的数据:
DELETE FROM staff WHERE gender='w';
查询数据
查询指定列:
SELECT email,username FROM staff;
查询年龄大于30的员工的id,名字,年龄:
SELECT id,username,age FROM staff WHERE age>30;
查询年龄大于20,小于50的id,性别:
SELECT id,gender FROM staff WHERE age>20 AND age<50;
查询邮箱为null的id和性别:
SELECT id,gender FROM staff WHERE email IS NULL;
查询名字中有a的id,用户名:
SELECT id,username FROM staff WHERE username LIKE '%a%';
为了进行下面的查询,现在插入如下数据:
增加两列,语文和数学成绩:
ALTER TABLE staff ADD COLUMN chinese INT,ADD COLUMN math INT;
UPDATE staff SET chinese=80,math=100 WHERE id=1;
UPDATE staff SET chinese=76,math=90 WHERE id=2;
UPDATE staff SET chinese=87,math=89 WHERE id=3;
UPDATE staff SET chinese=87,math=78 WHERE id=4;
UPDATE staff SET chinese=97,math=86 WHERE id=5;
UPDATE staff SET chinese=77,math=89 WHERE id=6;
查询数学总成绩:
SELECT SUM(math) FROM staff;
查询语文的平均成绩:
SELECT AVG(chinese) FROM staff;
查询id大于1的学生的语文最高成绩:
SELECT MAX(chinese) FROM staff WHERE id>1;
查询数学最低成绩:
SELECT MIN(math) FROM staff;
员工的所有人数:
SELECT COUNT(*) FROM staff;
查询分组数据:
SELECT username,COUNT(*) FROM staff GROUP BY gender;
查询分组数据中分组的数量大于1:
SELECT username,COUNT(*) FROM staff GROUP BY gender HAVING COUNT(*)>1;
查询
查询第1,2,3条数据:
SELECT id,username ,gender FROM staff LIMIT 0,3;
查询第4,5,6条数据:
SELECT id,username ,gender FROM staff LIMIT 3,3;
查询所有数据,按照语文成绩倒序排列:
SELECT * FROM staff ORDER BY chinese DESC;
查询数学成绩大于80的所有数据,按数学成绩的倒序排:
SELECT * FROM staff WHERE math>80 ORDER BY math DESC;
查询时指定别名:
SELECT id AS '编号',username AS '姓名',gender AS '性别' FROM staff;
查询时进行相加计算,只能数字类型:
SELECT id '编号',username '姓名',(chinese+math)AS '总成绩' FROM staff;
删除数据:
区别:
delete from 和 truncate table 的区别?
1)delete from删除全部,也可以按条件删除,但是truncate table只能全表删除,不能按条件删除
2)delete from删除的数据可以回滚,truncate table删除的数据不能回滚。
3)delete from不可以把自增长约束(auto_increment)重置,truncate table可以把自增长约束(auto_increment)重置
TRUNCATE TABLE staff;
DELETE FROM staff;
总结
凡是操作数据库,都加 DATABASE关键字;
凡是操作表的,都加TABLE关键字;
修改表的,加COLUMN关键字;使用ALTER;
进行数据的增删改查的,什么都不加,直接写具体的表名称;
INSERT INTO 表名……;
DELETE FROM 表名……;
UPDATE 表名 SET……;
SELECT …… FROM 表名……;