1 2 3 4

mysql基础及使用

数据库基础

你可能还没有意识到,其实自己一直在使用数据库,在电子邮件地址簿里查找名字时,在搜索网站站点上进行搜索,
都是在使用数据库

数据库

数据库这个术语的用法很多,理解数据库最简单时方法是将其想象为一个文件柜,此文件柜是一个存放数据的物理位
置,不管数据是什么以及如何组成的

数据库(database): 保存有组织的数据的容器

当你将资料放入自己的文件柜时,并不是随便将它们扔进某个抽屉(数据库)中,而是在抽屉中创建文件(表),然后将相关的资料
放入特定的文件中

表(table) 某种特定类型数据的结构化清单

  • 存储在表中的数据应该是一种类型的
  • 数据库中的每个表都有一个名字,用来标示自己。此名字时唯一的。这表示数据库中没有其他表具有相同的名字

列(column)表中的一个字段,所有表都是由一个或者多个列组成的

  • 理解列的最好办法就是将数据库表想成一个网格,网格中每一列存储着一条特定的信息
  • 比如在顾客表中,一个列存储着顾客编号,一个列存储着着顾客姓名,地址和联系方式等其他信息都存储在各自的列中

数据类型

数据库中每个列都有相关的数据类型,数据类型定义列可以存储的数据种类
数据类型(datatype) 所容许的数据的类型,每个表列都有相应的数据类型,它限制该列存储的数据

  • 数据类型还帮助正确的排序数据,并在优化磁盘使用方面起到重要的作用。因此,在创建表时必须对数据类型给予特别的关注

  • 表中的数据是按行存储的,所保存的每个记录存储在自己的行内,
  • 如果将表想象为网络,网格中垂直的是表列,水平行为表行

行,也被称之为记录

主键

  • 表中每一行都应该有可以唯一标识自己的一列(或一组列)
  • 一个顾客表可以使用顾客编号列,而订单表可以使用订单ID,雇员表可以使用顾客编号列
    主键(primary key) 一列(或一组列),其值能唯一区分表中每个行

唯一标识表中每行的这个列(或这组列)称为主键,主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行

表中的任何列都可以作为主键,只要满足下列条件

  • 任意两行都不具有相同的主键值
  • 每个行都必须具有一个主键值

使用主键的好习惯

  • 不更新主键列中的值
  • 不重用主键列的值
  • 不在主键列中使用可能会更新的值

增删改查

DDL数据定义语言

  • 库对象,库名字,库属性
  • 区分大小写
  • 开发规范:库名小写
#创建oldboy数据库
mysql> create database oldboy;
#创建OLDBOY数据库
mysql> create database OLDBOY;
#查看数据库
mysql> show databases;
#查看oldboy的创建语句(DQL)
mysql> show create database oldboy;
#查看创建数据库语句帮助
mysql> help create database
#创建oldboy数据库添加属性
mysql> create database testa charset utf8;
#删除oldboy数据库
mysql> drop database oldboy;
#修改oldboy数据库属性
mysql> alter database oldboy charset gbk;
#查看oldboy的创建语句(DQL)
mysql> show create database oldboy;

表对象:列名、列属性、约束

创建表:create table

#查看创建表语句帮助
mysql> help create table
#创建表
mysql> create table student(
sid INT,
sname VARCHAR(20),
sage TINYINT,
sgender ENUM('m','f'),
cometime DATETIME);

数据类型

int: 整数 -231 ~ 231 -1
varchar:字符类型 (变长)
char: 字符类型 (定长)
tinyint: 整数 -128 ~ 128
enum: 枚举类型
datetime: 时间类型 年月日时分秒

创建表加其他属性

mysql> create table student(
sid INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ‘学号’,
sname VARCHAR(20) NOT NULL COMMENT ‘学生姓名’,
sage TINYINT UNSIGNED COMMENT ‘学生年龄’,
sgender ENUM('m','f')  NOT NULL DEFAULT ‘m’ COMMENT ‘学生性别’,
cometime DATETIME NOT NULL COMMENT ‘入学时间’)chatset utf8 engine innodb;
#查看建表语句
mysql> show create table student;
#查看表
mysql> show tables;
#查看表中列的定义信息
mysql> desc student;

数据属性

not null: 非空
primary key: 主键(唯一且非空的)
auto_increment: 自增(此列必须是:primary key或者unique key)
unique key: 单独的唯一的
default: 默认值
unsigned: 非负数
comment: 注释

删除表

#删除表
mysql> drop table student;

修改表定义:alter table

#修改表名
mysql> alter table student rename stu;
#添加列和列定义
mysql> alter table stu add age int;
#添加多个列
mysql> alter table stu add test varchar(20),add qq int;
#指定位置进行添加列(表首)
mysql> alter table stu add classid varchar(20) first;
#指定位置进行添加列(指定列)
mysql> alter table stu add phone int after age;
#删除指定的列及定义
mysql> alter table stu drop qq;
#修改列及定义(列属性)
mysql> alter table stu modify sid varchar(20);
#修改列及定义(列名及属性)
mysql> alter table stu change phone telphone char(20);

DCL:数据控制语言

grant 针对权限进行控制

#授权root@10.0.0.51用户所有权限(非炒鸡管理员)
mysql> grant all on *.* to root@'10.0.0.51' identified by 'oldboy123';

怎么去授权一个炒鸡管理员呢?

mysql> grant all on *.* to root@'10.0.0.51' identified by 'oldboy123' with grant option;

其他参数(扩展)

max_queries_per_hour:一个用户每小时可发出的查询数量
max_updates_per_hour:一个用户每小时可发出的更新数量
max_connetions_per_hour:一个用户每小时可连接到服务器的次数
max_user_connetions:允许同时连接数量

revoke
收回select权限

mysql> revoke select on *.* from root@'10.0.0.51';
#查看权限
mysql> show grants for root@'10.0.0.51';

DML:数据操作语言

操作表的数据行信息

insert

#基础用法,插入数据
mysql> insert into stu values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456);
#规范用法,插入数据
mysql> insert into stu(classid,birth.sname,sage,sgender,comtime,telnum,qq) values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456);
#插入多条数据
mysql> insert into stu(classid,birth.sname,sage,sgender,comtime,telnum,qq) values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456),
('linux02',2,NOW(),'zhangsi',21,'f',NOW(),111,1234567);

update

#不规范
mysql> update student set sgender='f';
#规范update修改
mysql> update student set sgender='f' where sid=1;
#如果非要全表修改
mysql> update student set sgender='f' where 1=1;

delete

#不规范
mysql> delete from student;
#规范删除(危险)
mysql> delete from student where sid=3;
#DDL删除表
mysql> truncate table student;

DQL:数据查询语言

select
常用用法

#查询单列
mysql> select countrycode from city;
#行级查询
mysql> select countrycode,district from city limit 2;
mysql> select id,countrycode,district from city limit 2,2;
#条件查询
mysql> select name,population from city where countrycode='CHN';
#多条件查询
mysql> select name,population from city where countrycode='CHN' and district='heilongjiang';
#模糊查询
mysql> select name,population,countrycode from city where countrycode like '%H%' limit 10;
#排序查询(顺序)
mysql> select id,name,population,countrycode from city order by countrycode limit 10;
#排序查询(倒叙)
mysql> select id,name,population,countrycode from city order by countrycode desc limit 10;
#范围查询(>,<,>=,<=,<>)
mysql> select * from city where population>=1410000;
#范围查询OR语句
mysql> select * from city where countrycode='CHN' or countrycode='USA';
#范围查询IN语句
mysql> select * from city where countrycode in ('CHN','USA');
posted @ 2019-09-21 18:02  多走多看  阅读(854)  评论(0编辑  收藏  举报