mysql -hlocalhost -uroot -p
set names gbk;
create database 数据库名字 charset utf8;
use 哪个数据库 可以是已经存在的;
create table 表名(
id int auto_increment ,
user_name varchar(20) comment '用户名',
use_pass char(32) not null comment '加密后的密码',
age tinyint default 18 comment '年龄,默认18岁',
use_code char(6) ,
reg_time datetime,
primary key (id),
unique key (user_name),
key (post_code),
key (reg_time)#普通索引
)charset utf8;#可以不用写 因为你使用的数据库时候已经设定了
数据库
drop database 数据库名字 #删除数据库
show databases #显示所有数据库
表
engine = “表的存储引擎名” 默认是InnoDB
drop table 表名; #删除某个表
show tables; #显示所有表的名字
desc 表名; #显示一个表结构
@@@@对表中的数据@@@@
@@增
对于插入的数据,如果是“字面数据”,则:数字不需要单引号,而字符串和时间日期类型就需要!alter
insert into 表名(字段名1,字段名2,..)values(值1,值2,...);
insert into test3(user_name,use_pass,jiage,fabu)values('张三',md5('123'),'30.3','2015-10-23 20:14:35');
++++++++++++++++++++++++++++++ md5()加密+++++++++++++++++++++++++++++++++++++++++++++++++
insert into sw_admin
(admin_user,admin_psd) values ('admin2',md5(123) );md5的插入
insert into sw_admin
(admin_user,admin_psd) values ('admin2',md5('admin') );
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@删
delete from 表名 【where 条件】;
就是以“行”为单位,删除某个表的某些行的数据
注意:没有设定where条件,就全部删除!
eg: delete from test where id=5;
delete from test where id<10 and (or) age>30;
@@改
update 表名 set 字段1=值1,字段2=值2,...[where 条件];
对某个字段设定的值,数字类型直接写,字符串类型和时间类型使用单引号!
eg: update test2 set user_name='张三丰',age=44 where id=12;
@@查
'test'
select 字段1, 字段2, .... from 表名 【where条件】【order by排序设定】【limit数量限定】;
order by 某字段名 asc; //此时取得数据会按该字段的值的大小“正序”排列出来;
order by 某字段名 desc; //此时取得数据会按该字段的值的大小“倒序”排列出来;
limit数量限定语句的作用是:将“前面”找到的数据(也许排过序了)再次做一个“局部”(部分)取出,其方式为:取出其中的第几行开始的多少行;其中,行号是从0开始算起的
第一行为0 limt3,3 就是第4,5,6行
:::::最简查询语句 select*from 表名; 查看所有
¥¥¥¥修改表(指的是其中的数据)¥¥¥¥
对字段
!!增:alter table 表名 add 新字段 新字段定义形式 【after 字段名(放在哪个字段之后)】
!!删:alter table 表名 drop 字段名;
!!改:
语法1:alter table 表名 change 要改的字段名 新的字段名 新的字段形式//可以改字段名跟其他
语法2:alter table 表名 modify 要改的字段名 类型 字段属性 //字段名不变 只改属性
对索引(约束);
!!!增:alter table 表名 add 索引名(字段名);这里注意要加括号
alter table 表名 add primary key (字段名)//添加主键索引
!!!删:alter table 表名 drop index 索引名;//通常我们都不用给索引设定名字,系统会自动分配(分配为 key ‘字段名’)
这里index 可以换成key eg:alter table suoyin add key reg_time;
¥¥¥¥¥:show create table 表名; 可以通过这个语句来显示这个表中设置了什么索引
alter table 表名 drop primary key //删除主键索引
!!!改:
alter table 表名 选项名=新的选项值;(表的类型)#engine = “表的存储引擎名” 默认是InnoDB
!!!改表名
alter table 表名 rename 【to】 新的表名;
create table 新表名 like 旧表名; //根据现有的表,创建一个相同结构的表。
==============视图=============
视图就是一条查询语句,只是给这个查询语句,设定了一个“名字”,该名字就是所谓视图!(个人理解是个虚拟的表但是在数据库的管理系统中可以显示出来 就是查询大数据时候提取符合要求的数据自建的一个表)
1,视图名跟表名是一个级别的名字,隶属于数据库;
2,该语句的含义可以理解为:就是将该select命名为该名字(视图名);
3,视图也可以设定自己的字段名,而不是select语句本身的字段名——通常不设置。
4,视图的使用,几乎跟表一样!
!!!!
create view v1 as select*from user_list where age>18;
create view v2 as select id,user_name,user_pass from user_list;
可以修改视图,但其实所谓修改视图,也就是修改视图所代表的那条select。
alter view 视图名 as 重新写这条select语句;
=================数据操作语言============
数据的插入
形式1:insert [into]表名[(字段名1,字段名2,....)]valuses(值表达式1,值表达式2,....);
形式2:replace [into] 表名 [(字段名1,字段名2,....)] values (值表达式1,值表达式2,....), (.....), ....;
形式3:insert [into] 表名 [(字段名1,字段名2,....)] select 字段名1,字段名2,.... from 其他表名;
形式4:insert [into] 表名 set 字段名1=值表达式1,字段名2=值表达式2,....;
1,重要观念:插入数据,都是以“行”为单位进行。
2,形式1和形式2基本一样,只在于形式2如果插入的数据有主键或唯一键的字段相同时,会进行修改,而形式1却会报错——因为违反了主键约束或唯一约束;
3,形式3可以将一条select查询的结果数据,插入到指定的表;
4,形式4只能一次插入一条数据(即一行)。
5,对于插入的数据,如果是“字面数据”,则:数字不需要单引号,而字符串和时间日期类型就需要!
6,对于有些字段的值,如果有其自身的设定(比如自增长,默认值),就可以不插入。
replace 是替换的意思 就是如果id设置了主键 不可重复 用形式1插入重复的id号 会报错 但是用replace 插入 不会报错 但是会修改了那行数据 类似update;
truncate 表名; 清空一个表的所有数据,并恢复到初始状态
======特别:数据导入语句====
如果导入的数据是一个‘排列整齐’的纯文本的数据;
1 孙悟空 男 江西
2 猪八戒 男 四川
3 沙和尚 男 黑龙江
4 嫦娥 女 河北
每个数据之间都有一个tab符
可以通过一个loaddata 语法,来将多行多列数据,一次性导入到一个表中;
load data infile 'H:/../../.txt路径'into table load_demo;
首先要将这个文本文件用EdiPlus打开 文档==》文件编码==》文件编码==》改为utf8 然后保存 路径是直接拖进去的 如果还是失败
就这样写:load data infile 'txt.路径'into 表名 lines terminated by 'rn';
==============删除数据=============
基本语法:
delete from 表名【where 条件】【order排序】【limit限定】;
说明:
1,删除数据,也是以“行”为单位进行。
2,where条件用于设定要删除的数据需要满足的条件,比较复杂,在select语句中学习。
3,order by用于设定删除这些数据的顺序;
4,limit用于设定要删除的行数:limit 10就表示只删除按该顺序所设定的前10行。
5,delete语句中,where几乎总是需要使用,而order 和limit却极少使用!
delete from load_demo where gender='男' order by gender limit 2;
一个类似删除数据的语句:
truncate 表名;
作用:清空一个表的所有数据,并将该表恢复到“初始状态”——通常就是自增长的id值从最初开始。
对比:delete from 表名;
它只是单纯删除所有数据,并不恢复表的状态。
修改数据(改)
update 表名 set 字段名1=值表达式1,字段名2=值表达式2,....[where条件] [order排序] [limit限定];
说明:
1,修改数据,也是以“行”为单位进行。
2,where条件用于设定要修改的数据需要满足的条件
3,order by用于设定修改这些数据的顺序;
4,limit用于设定要修改的行数:limit 10就表示只修改按该顺序所设定的前10行。
5,update语句中,where几乎总是需要使用,而order 和limit却极少使用!
6,值表达式中,如果是“字面值”,则对于数字值,不需要加引号,如果是字符或时间,则需要加单引号。
基本查询语句
语法形式
select [all | distinct] 字段或表达式列表
[from子句]
[where子句]
[group by子句]
[having子句]
[order by子句]
[limit子句]
mysql>select 8,18,8+18;
8 18 8+18
8 18 26
mysql>select 8 as id, 18 as age, 8+18 as salary;
id age salary
8 18 26
在select子句中,All和Distinct的作用:
All:表示会返回所有行,而不管取得的数据行是否有重复行。如果不写,则默认就是All
Distinct:会检查取得的数据行是否有重复行,如果有,则会消除重复行。
(个人理解 distinct就是将重复的数据删掉 这里的重复指的是 每条数据都是一样的 就是复制的那样)
where子句:
基本含义:
where子句的作用,跟if类似:就是判断某一行的数据是否满足条件——判断的结果永远是布尔值
也可以理解为跟while类似:对一个表中的所有行的每一行“循环判断”是否满足条件。
作用:
对from子句中的表的所有数据行,逐行进行“判断”,看是否满足设定的条件。
如果满足,就会取出该行,否则就忽略。
where子句中,有很多运算符可用:
算术运算符:
- / %
where id+3 > 6;
where age-4 < 18;
比较运算符
> >= < <= =(等于) <>(不等于)
注意:这里“=”不是赋值,赋值语句不能使用该符号!相当于php或js中“==”
逻辑运算符:
与: and
或: or
非: not
is 运算符:判断布尔值和控制null:
他们有专门的语法:
XX is true
XX is false
XX is null
XX is not null
其中,XX表示一个字段名;
所谓布尔值,其实只是这样一个类型的别名: tinyint(1)
实际上,如果不是该类型,通常也都会转换为布尔类型来看到:0表示false,非0表示true
select *from liuyanbiao where huifu is null 就是找出回复null 的数据
这里 不能 用 huifu = null
select * from liuyanbiao where huifu is not null
between运算符:
形式: xx between 值1 and 值2;
select * from user_list where age >=10 and age <=20;
select a.* from tp_goods as a,tp_category as c where a.goods_category_id=c.cat_id