您的位置:首页 > 数据库 > MySQL

MySql入门

2016-04-09 21:46 483 查看
数据库的相关命令

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)
);


如有错误,请不吝指教,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: