MySql入门
来源:互联网 发布:thinkphp5防止sql注入 编辑:程序博客网 时间:2024/05/29 16:13
数据库的相关命令
a>创建数据库
CREATE DATABASE 数据库名
b>创建数据库并设置编码utf-8
CREATE DATABASE 数据库名 DEFAULT CHARACTER SET utf8;
c>删除数据库
DROP DATABASE 数据库名
数据表的相关命令
a>删除表
DROP TABLE 表名;
b>新建表
DROP TABLE IF EXISTS 表名; CREATE TABLE 表名 ( 'id' INT NOT NULL AUTO_INCREMENT, 'username' VARCHAR(60) NOT NULL DEFAULT '' COMMENT '登录名', 'password' CHAR(32) NOT NULL DEFAULT '' COMMENT '登录密码', PRIMARY KEY ('id'), -- 主键 INDEX ('username') -- 索引 ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='新建表';
c>修改表名
ALTER TABLE 表名1 RENAME TO 表名2;
d>添加列
ALTER TABLE 表名 ADD COLUMN 列名 列类型(如:VARCHAR(30));
e>删除列
ALTER TABLE 表名 DROP COLUMN 列名;
f>几条简单的sql语句
选择:SELECT * FROM 表名 WHERE 范围; 插入:INSERT INTO 表名(字段名1,字段名2) VALUES(字段值1,字段值2); 删除:DELETE FROM 表名 WHERE 范围; 更新:UPDATE 表名 SET 字段名=字段值 WHERE 范围; 查找:SELECT * FROM 表名 WHERE 字段名 LIKE '%字段值%'; 排序:SELECT * FROM 表名 ORDER BY 字段名1,字段名2 [DESC]; 总数:SELECT COUNT AS totalcount FROM 表名; 求和:SELECT SUM(字段值) AS sumvalue FROM 表名; 平均:SELECT AVG(字段名) AS avgvalue FROM 表名; 最大:SELECT MAX(字段名) AS maxvalue FROM 表名; 最小:SELECT MIN(字段名) AS minvalue FROM 表名;
g>赋予数据库用户权限(每个数据库都创建单独的用户)
CREATE USER '项目用户'@'localhost' IDENTIFIED BY '项目用户密码'; GRANT ALL PRIVILEGES ON 数据库名称.* TO 项目用户@'localhost' ; 或者GRANT ALL PRIVILEGES ON 数据库名称.* TO 用户名@'%' IDENTIFIED BY '用户密码';(用'%'表示从任何地址连接)
h>添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(列名);
i>创建索引
CREATE INDEX 字段名 ON 表名;
j>删除索引
DROP INDEX 字段名;
k>创建视图
CREATE VIEW 视图名 AS SELECT 语句;
l>删除视图
DROP VIEW 视图名;
m>联合查询(简单介绍)
结果集列联合:JOIN ,常用的有LEFT JOIN:
SELECT a.a, a.b, b.c, b.d FROM a LEFT OUT JOIN b ON a.a = b.c;
结果集行联合:UNION或者UNION ALL,格式如下(注意列的名称和个数一定要一致):
SELECT a.a as col1, a.b as col2 from a UNION ALL SELECT b.c as col1, b.d as col2 from b;
n>分组:GROUP BY 一般与count,sum,max,min,avg联合使用
SELECT SUM(字段名1) FROM 表名 GROUP BY 字段名2;
o>前10条记录
SELECT * FROM 表名 LIMIT 0,9;(mysql没有top语法,limit一般常用来分页)
p>排序(desc降序;asc升序;默认是升序)
SELECT * FROM 表名 ORDER BY 列名 DESC;
创建一个名称为mydb1的数据库:
create database mydb1;show databases;
创建一个使用utf-8字符集的mydb2数据库:
create database mydb2 character set utf8;
创建一个使用utf-8字符集,并带校对规则的mydb3数据库:
create database mydb3 character set utf8 collate utf8_general_ci;
查看前面创建的mydb2数据库的定义信息:
show create database mydb2;
查看服务器中的数据库,并把其中某一个库的字符集修改为gb2312;
alter database mydb2 character set gb2312;show create database mydb2;
演示恢复和备份
create database tt;use tt;create table a( name varchar(20));insert into a(name) values('aaaa');select * from a;
—–看到a表有数据
对tt作备份操作,启动一个window命令行窗口,执行如下命令:
mysqldump -uroot -p tt>d:\tt.sql
演示恢复
①先删除库
drop database tt;
②恢复tt库(1)
2.1 为恢复库,要先创建库 create database tt;
2.2 再恢复tt库
use tt; source d:\tt.sql (source:可以执行一个 sql脚本)
③恢复tt库(2)
2.1 为恢复库,要先创建库 create database tt;
2.2 恢复库
mysql -uroot -proot tt<d:\1.sql; (window命令)
创建一个员工表
use mydb2;create table employee( id int, name varchar(40), sex varchar(4), birthday date, entry_date date, job varchar(40), salary decimal(8,2), resume text);
show tables; 查看库的所有表(查看库里的表要先打开库)
show create table employee; 查看表的创建细节
desc employee; 看表结构
在上面员工表的基本上增加一个image列。
alter table employee add column image blob;
修改job列,使其长度为60。
alter table employee modify job varchar(60);
删除sex列
alter table employee drop column sex;
表名改为user
alter table employee rename to user;
修改表的字符集为utf-8
alter table user character set utf8;
列名name修改为username
alter table user change column name username varchar(40);
删除表
drop table user;
使用insert语句向表中插入一个员工’xiaozhang’的信息
rename table user to employee;insert into employee(id,username,birthday,entry_date,job,salary,resume) values(1,'xiaozhang','1981-09-09','1981-09-09','engineer',30000,'aaaaaa');select * from employee;
插入数据的细节(插入中文),告诉mysql,采用gb2312编码
show variables like 'chara%'; //显示所有根字符串类型 set character_set_client = gb2312; insert into employee(id,username) values('3','张三');
要想查看时不乱码
show variables like 'chara%'; set character_set_results = gb2312; select * from employee;
将所有员工薪水修改为5000元。
update employee set salary=5000;
插入员工’bbb’的信息
insert into employee(id,username)values('2','bbb');
将姓名为 ‘bbb’ 的员工薪水修改为3000元。
update employee set salary=3000 where username='bbb';
将姓名为 ‘bbb’ 的员工薪水修改为4000元,job改为ccc
update employee set salary=4000,job='ccc' where username='bbb';
将bbb的薪水在原有基础上增加1000元
update employee set salary=salary+1000 where username='bbb';
删除表中所有记录。
delete from employee;
使用truncate删除表中记录。
truncate table employee;
查询表中所有学生的信息
select * from student;
查询表中所有学生的姓名和对应的英语成绩
select name,english from student;
过滤表中重复的英语数据
select distinct english from student;
查询英语分数在 80-90之间的同学。
select name from student where english>80 and english<90;select name from student where english between 80 and 90; == select name from student where english>=80 and english<=90;
查询数学分数为89,90,91的同学。
select * from student where math in(89,90,91);
查询所有姓李的学生成绩。
select * from student where name like '李%';select * from student where name like '李_';
对数学成绩排序后输出。
select name,math from student order by math;
对总分排序后输出,然后再按从高到低的顺序输出
select name 姓名,(chinese+english+math) 总分 from student order by (chinese+english+math) desc;select name 姓名,(chinese+english+math) 总分 from student order by 总分 desc;
统计一个班级共有多少学生?
select count(name) from student;select count(*) from student;
统计数学成绩大于90的学生有多少个?
select count(*) from student where math>90;
关于 count的函数的细节 (count只统计有值的行)
统计一个班级语文成绩平均分
select sum(chinese)/count(*) from student;
统计一个班级语文成绩平均分
select avg(chinese) from student;
求一个班级总分平均分
select avg(chinese+math+english) from student;
求班级最高分和最低分
select max(chinese+math+english),min(chinese+math+english) from student;
对订单表中商品归类后,显示每一类商品的总价
select product,sum(price) from orders group by product;
查询购买了几类商品,并且每类总价大于100的商品
select product from orders group by product having sum(price)>100;
MySQL的约束
定义主键约束(每一个表必须有一个主键列)
create table student( id int primary key, name varchar(40));
定义主键自动增长
create table student( id int primary key auto_increment, name varchar(40));
删除主键:
alter table tablename drop primary key;
定义唯一约束
drop table student;create table student( id int primary key auto_increment, name varchar(40) unique);
定义非空约束
drop table student;create table student( id int primary key auto_increment, name varchar(40) unique not null);
定义外键约束
create table husband( id int primary key, name varchar(40));
create table wife( id int primary key, name varchar(40), husband_id int, constraint husband_id_FK foreign key(husband_id) references husband(id));insert into husband(id,name) values(1,'张三');
表的设计:
一对多或多对一的对象存到数据库时,表的设计方案
(举例:部门和员工)
create table department( id int primary key, name varchar(40));create table employee( id int primary key, name varchar(40), salary decimal(8,2), department_id int, constraint department_id_FK foreign key(department_id) references department(id));
多对多对象的表的设计(举例:老师和学生)
create table teacher( id int primary key, name varchar(40), salary decimal(8,2));create table student( id int primary key, name varchar(40));create table teacher_student( teacher_id int, student_id int, primary key(teacher_id,student_id), constraint teacher_id_FK foreign key(teacher_id) references teacher(id), constraint student_id_FK foreign key(student_id) references student(id));
一对一的对象的数据库设计
create table person( id int primary key, name varchar(40));create table idcard( id int primary key, city varchar(40), constraint id_FK foreign key(id) references person(id));
自连接的表
create table person( id int primary key, name varchar(40), parent_id int, constraint parent_id_FK foreign key(parent_id) references person(id));
如有错误,请不吝指教,谢谢!
- MySql入门
- MYSQL入门
- MySQL入门
- MySQL 入门
- MYSQL入门
- mysql入门
- MySQL 入门
- Mysql入门
- MySql入门
- mysql入门
- mysql入门
- Mysql入门
- MySQL入门
- mysql入门
- mysql入门
- mysql入门
- mysql入门
- MySQL入门
- POJ 3616 Milking Time(区间DP)
- WHOJ 1609 - Han Move【细心】
- Android library projects cannot be launched解决方法
- HDU 1879 继续畅通工程
- NKOI 1120 最短路默写
- MySql入门
- 周易六十四卦——观卦
- leetcode---Pascal's Triangle
- HDU 1017 A Mathematical Curiosity(枚举)
- ?Python 练习实例11
- autoptr的实现
- 关于发送邮件的几种方案
- 网站性能
- Codeforces 630M Turn