日期:2025/04/03 16:04来源:未知 人气:54
1.navicat创建数据库:
字符集有两个utf8:utf8mb4,utf8:
utf8mb4比较于utf8多了Emoji表情和一些不常用的汉字,以及任何新增的 Unicode 字符等等。
排序规则;
utf8_unicode_ci比较准确,utf8_general_ci速度比较快。一般选utf8_general_ci。
如果创建不了,需要root用户授权:
GRAN Tprivileges ON databasename.tablename TO 'username’@‘host’;
privileges:表示要授予什么权力,例如可以有 select , insert ,delete,update等,如果要授予全部权力,则填 ALL;
databasename.tablename:表示用户的权限能用在哪个库的哪个表中,如果想要用户的权限很作用于所有的数据库所有的表,则填 .,*是一个通配符,表示全部。
'username'@'host':表示授权给哪个用户。
grant all on . to 'xxx'@'%'; 表示给用户xx授权,让xxx能给所有库所有表实行所有的权力。
撤销权利grant改成revoke;
用 . 授权,撤销时不能撤销select 权利,用 . 撤销权利,也不能撤销select权利。
msyql字段常用数据类型:
整型int Unsigned:范围(0 ~ 4294967295) ,TINYINT(0 ~ 255),SMALLINT(0 ~ 65535),MEDIUMINT(0~ 16777215)。
整型int signed:范围(-2147483648 ~2147483647) ,TINYINT(-128 ~ 127),SMALLINT(-32768 ~ 32767),MEDIUMINT(-8388608 ~ 8388607)。
小数型decimal:表示浮点数,如decimal(5,2)表示共存5位数,小数占2位。
字符串char型:范围(0-255),表示固定长度的字符串,如char(3),如果填充'ab'时会补一个空格为'ab '。
字符串varchar型:范围(0-255),表示可变长度的字符串,如varchar(3),填充'ab'时就会存储'ab'。
字符串text型:范围(0-65535),表示存储大文本,当字符大于4000时推荐使用。
日期时间型: date, time, datetime
时间类型:DATE 字节长度:4 格式:'2020-01-01'
时间类型:TIME 字节长度:3 格式:'12:29:59'
时间类型:DATETIME 字节长度:8 格式:'2020-01-01 12:29:59'
时间类型:YEAR 字节长度:1 格式:'2017'
时间类型:TIMESTAMP 字节长度:4 格式:'1970-01-01 00:00:01' UTC ~ '2038-01-01 00:00:01' UTC
枚举类型: enum。
大文件图片、音频、视频等,不直接存储在数据库中,只在数据库中存储这些文件的保存路径。
定义字段的长度够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间,不存储图片这些大文件也是为了节省存储空间,提高数据库效率。
表约束:
主键primary key:物理上存储的顺序。
非空not null:此字段不允许填写空值。
惟一unique:此字段的值不允许重复。
默认default:当不填写此值时会使用默认值,如果填写时以填写为准。
外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常。虽然外键约束可以保证数据的有效性,但是在进行数据的增加、修改、删除、查询时,都会降低数据库的性能,所以不推荐使用,可以在逻辑层进行控制。
数据库操作:
新建数据库test1_db,定义字符集为utf8;
create database test1_db charset=utf8;
使用数据库test1_db:
use test1_db;
查看数据库test1_db的创建信息:
show create database test1_db;
删除数据库test1_db:
drop database test1_db;
查看系统时间:
select now();
查看当前使用的数据库:
select database();
表操作:
选择数据库,查看数据库里有哪些表:
show tables;
创建一个学生表:
create table 表名 (
字段 类型 约束,
字段 类型 约束,
字段 类型 约束
);
create table students(
id mediumint unsigned not null auto_increment primary key,
name varchar(20),
age tinyint unsigned default 18,
hight decimal(5,2),
gender enum("male","female","secret") default "secret",
class_id int unsigned
);
查看表结构:
desc students;
删除表:
drop table students;
向表里插入数据:
insert into students values (0,"王大锤",23,170.11,"male",1001);
查看表信息:
select * from students;
指定值插入:
insert into students(name,hight,class_id) values ("铁锤妹妹",170.11,1001);
修改表:
为表新加一列birthday 数据类型为datetime :
alter table students add birthday datetime;
修改列birthday 数据类型(修改约束条件 用modify)为date:
alter table students modify birthday date;
修改列birthday的名称为生日:
alter table students change birthday your_day date;
删除列birthday:
alter table students drop your_day;
查看数据表的建表信息:
show create table students;
看到的是我们建表的标准写法。
其中:engine 是引擎的意思,msyql主要几种引擎:
InnoDB 是默认引擎,适合要求有提交、回滚、崩溃恢复等能力的事物安全能力和并发控制的场景。
MyISAM引擎能较高效率的处理插入,查询。
Archive支持高并发的插入操作,非常适合存储归档数据。
Memory引擎适用于临时存放数据,数据量不大,不需要较高数据安全性场景。
显示数据库引擎:
show engines;
修改表数据:
插入数据:
insert into students (name,age,hight,class_id,birthday) values ("张老五",26,166.21,1002,'1988-01-02');
insert into students(name) values('转轮王'),('细水'),('彩戏师');
修改数据:
update students set name ="张阿生" ,age = 30 where id =3;
删除数据:
delete from students; 这个是把数据全部删掉;
delete from students where name = "张老五";
实际上不这么删除,数据是很宝贵的,用打标记的方式区别:
新增一列:
alter table students add on_off bit default 0;
标记数据转轮王为已删除数据:
update students set on_off =1 where name="转轮王";
select * from students where on_off = 0;就没有转轮王了。
下一篇:MySQL表设计经验汇总篇