mysql基础

来源:互联网 发布:淘宝双11报名 编辑:程序博客网 时间:2024/05/24 11:15
sql的分类:
DDL:数据定义语言
操作对象:数据库和表
关键词:create alter drop
DML:数据操作语言
操作对象:记录
DQL:数据查询语言(非官方)
DCL:数据控制语言
操作对象:用户  事物  权限

//////////////////////

登录数据库
mysql -uroot -p密码
DDL:数据定义语言
操作对象:数据库和表
关键词:create alter drop
操作数据库:
创建: 格式:
create database 数据库名称;
删除: 格式:
drop database 数据库名称;
常用的命令:
查看所有的数据库:show databases;
操作表:
   创建表  格式:
create table 表名(字段描述,字段描述);
字段描述:
   字段名称  字段类型  [约束]
例如:
    create table user1(
id int primary key auto_increment,
username varchar(20)
    );
   修改表  格式:
 alter table 表名 ....
修改表名:
alter table 旧表名 rename to 新表名;
例如:alter table user1 rename to user10;
添加字段:
alter table 表名add[column]字段描述;
  例如:alter table user add password varchar(20);


修改字段名:
alter table 表名 change 字段名称 新字段描述;
  例如:alter table user change password pwd varchar(20);
修改字段描述:
alter table 表名 modify 字段名称 字段类型 [约束];
   例如:alter table user modify pwd int;
删除字段:
alter table 表名 drop 字段名;
   删除表: 格式:
drop table 表名;
常用命令:
切换或者进入数据库: use 数据库名称;
查看当前数据库下所有表:show tables;
查看表结构:desc 表名;
查看建表语句:show create table 表名;
///////////////////////
DML:数据操作语言
操作对象:记录(行)
关键词:insert update delete
插入:格式1:
    insert into 表名 values(字段值1,字段值2,...,字段值n);
    注意:默认插入全部字段,
  必须保证values后面的内容的类型和顺序和表结构中的一致
  若字段类型为数字,可以省略引号
   例如:  insert into user values(1,‘tom’);
   insert into user values(‘2’,‘tom’);
   格式2:insert into表名(字段名,字段名1,...)values(字段值,字段值1,...);
     注意:插入指定的字段
   必须保证values后面的内容的类型和顺序和表名后面的字段的类型和顺序保持一致。
    例如:insert into user (username,id)values('jack',4);
修改:格式:
   update 表名 set 字段名=字段值,字段名1=字段值1···[where 条件];
例如:update user set username =‘jerry’where username ‘jack’;
删除:格式:
   delete from 表名 [where 条件];
   例如:delete from user where id=2;


///////////////////
数据类型:
java         mysql
byte     tinyint
short     smallint
int     int(重点)
long     bigint
char/String varchar(重点)|char
varchar:可变长度 mysql的方言


boolean tinyint|int 代替
float|double float|double
  注意:double(5,2):该小数长度为5个,小数占2个  最大值999.99


java.sql.Date date 日期
java.sql.Time time 时间
java.sql.Timestamp timestamp(重点)时间戳 若给null,数据库会把当前时间存放在数据库中
datetime(重点)日期+时间
java.sql.Clob(长文本) mysql的方言(text)
///////////////////////////
约束: 作用:
为了保证数据的有效性和完整性
mysql:主键(primary key)唯一约束(unique) 非空约束(not null)外键(foreign key)
    主键:
方式1:建表的同时加约束  格式:字段名称 字段类型 primary key
方式2:建表的同时在约束区域添加约束
   所有的字段声明完成之后,就是约束区域了
   格式:primary key (字段1,字段2)
方式3:建表之后,通过修改表结构添加约束
   create table pk02(id int,usename varchar(20));
   alter table 表名 add primary key(字段1,字段2);
   alter table pk02 add primary key(id,usename);
  
   insert into pk02 values(1,'tom');//成功
       insert into pk02 values(1,'tomcat')//成功;
    唯一约束:对null不起作用
   方式1:建表的同时加约束  格式:字段名称 字段类型 unique
方式2:建表的同时在约束区域添加约束
   所有的字段声明完成之后,就是约束区域了
   格式:unique (字段1,字段2)
方式3:建表之后,通过修改表结构添加约束
       alter table 表名 add unique(字段1,字段2);联合唯一
    非空约束:
方式:建表的同时加约束  格式:字段名称 字段类型 not null
///////////////////////
truncate 清空表(重点)    格式:
truncate 表名;干掉表,重新创建一张空表
 和delete from 区别:
delete属于DML语句    truncate属于DDL语句
delete逐条删除    truncate干掉表,重新创建一张空表
auto_increment 自增
要求:
   1、被修饰的字段类型支持自增。一般int
   2、被修饰的字段必须是一个key 一般是primary key
///////////////////////////
案例2-创建多表,可以描述出表与表之间的关系
需求: 技术分析:
sql
常见关系:一对多,一对一,多对多
ER图:实体用矩形表示,属性用椭圆表示,关系用菱形表示
一对多:用户和订单  
create table user(
   id int primary key auto_increment,
   username varchar(20)  );
创建订单表
  create table orders(
             id int primary key auto_increment,
    totalprice double,
    user_id int );
      为了保证数据的有效性和完整性,添加约束(外键约束)
 在多表的一方添加外键约束
格式:alter table 多表名称 add foreign key(外键名称) references 一表名称(主键);
alter table orders add foreign key (user_id) references user(id);
       添加外键约束后的特点:(重点)
1、主表中不能删除从表中已引用的数据
2、从表中不能添加主表中不存在的数据
开发中处理一对多:(重点)
在多表中添加一个外键,名称一般为主表的名称_id,字段类型一般和主表的主键的类型保持一致,
为了保证数据的有效性和完整性,在多表的外键上添加外键约束即可。
多对多
例子:商品和订单
创建商品表
 create table product(id int primary key auto_increment,
name varchar(20),
price double);
创建中间表:create table orderitem(
oid int primary key,pid int primary key);
添加外键约束
alter table orderitem add foreign key(oid) references orders(id);
alter table orderitem add foreign key(pid) references orders(id);


在开发中处理多对多:
  引入一张中间表,存放两张表的主键,一般会将这两个字段设置为联合主键,这样就可以将多对多的关系
  拆分成两个一对多了
  为了保证数据的完整性和有效性
需要在中间表上添加两个外键约束
一对一:
在开发中,例如:pension idcard
思路1:将两个实体合二为一
思路2:在一张表上将这个表的主键设置成外键且添加外键约束。
//////////////////////////////////
案例3-多表查询
技术分析:
内连接
外连接
子查询
///////////////////////
笛卡尔积:了解
多张表无条件的联合查询。没有任何意思
select a.*,b.* from a,b;
内连接:(重点)
格式1:显示的内连接
     select a.*,b.* from a [inner] join b on ab的连接条件
格式2:隐式的内链接
     select a.*,b.* from a,b where ab的连接条件
外连接:(重点)
左外连接:
 select a.*,b.* from a left [outer] join b on 连接条件;
意思:先展示join左边的(a)表的所有数据,根据条件关联查询join右边的表(b),
 符合条件展示出来,不符合以null值展示。
右外连接:
 select a.*,b.* from b right [outer] join a on 连接条件;
意思:先展示join右边的(a)表的所有数据,根据条件关联查询join左边的表(b),
 符合条件展示出来,不符合以null值展示。
子查询:(重点)
一个查询依赖于另一个查询