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

如有错误,请不吝指教,谢谢!

1 0
原创粉丝点击