mysql的基本使用
阅读数:308 评论数:0
跳转到新版页面分类
数据库
正文
一、登录mysql
mysql --version
-查看Mysql版本
mysql -h hostname -u username -p
-h:运行mysql服务器的机器,如果正在该机器上运行此命令,可以忽略hostname参数
-u:连接数据库的用户名,如果不指定,默认值是登录该操作系统的用户名
或者
mysql -D dbname -h hostname -u username -p
mysql -uroot -Pnb2022…a
Mysql> alter user root@”localhost” identified by “123456”;
MySQL> exit;
如果在修改密码的过程中报:“Your password does not satisfy the current policy requirements”
mysql> set global validate_password_policy=0;
#使用 CREATE
CREATE USER 'testDatabase'@'%' IDENTIFIED BY '111111';
# CREATE USER '你的用户名'@'可以访问数据库的ip,%表示所有' IDENTIFIED BY '数据库密码
# 使用GRANT USAGE,USAGE表示没有任何权限。
GRANT USAGE ON *.* TO 'dummy'@'localhost';
GRANT ALL ON testDatabase_jixian.* TO 'username'@'%';
-- 使用 with grant option ,可以是用户拥有授权给其他角色权限的能力
GRANT ALL ON testDatabase_jixian.* TO 'username'@'%' with grant option;
SHOW GRANTS FOR 'username'@'%'
SET PASSWORD FOR 'username'@'指定ip' = PASSWORD('密码');
如果是当前登录用户直接用
SET PASSWORD = PASSWORD("密码");
REVOKE privilegexxx ON databasename.tablenamexxx FROM 'username'@'指定ip';
DROP USER 'username'@'指定ip'; -- 方式一
delete from mysql.user where user="username"; -- 方式二
二、数据库管理
// 创建数据库
create database dbname;
// 删除数据库
drop database dbname;
// 切换数据库
use dbname;
--查看mysql支持的字符集
show character set;
character-set-server/default-character-set | 服务器字符集,默认情况下采用 |
character-set-database | 数据库字符集 |
character-set-table | 数据库表字符集 |
优先级依次增加。所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,统一采用character-set-server。
character-set-client | 客户端的字符集,当客户端向服务器发送请求时,请求以该字符集进行编码 |
character-set-results | 结果字符集。服务器向客户端返回结果时,以该字符集进行编码 |
在客户端,如果没有定义character-set-results,则采用character-set-client字符集作为默认的字符集。所以只需要设置character-set-client字符集。
要处理中文,则可以将character-set-server和character-set-client均设置为GB2312,如果要同时处理多国语言,则设置为UTF8。
[mysqld]
character_set_server=utf8
这样配置会将全局的character_set_server变量设置为utf8。
CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
CREATE TABLE tbl_name (column_list)
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]]
ALTER TABLE tbl_name
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]
col_name {CHAR | VARCHAR | TEXT} (col_length)
[CHARACTER SET charset_name]
[COLLATE collation_name]
--查看mysql的collation
show collation;
collations是与字符集编码对应的一套规则,每一种字符集都有一个默认的collation,这套规则决定了字符如何比较,从而解决如何排序的问题。
{character set name}_{language-specific}_{collation_suffixes}
第一部分是字符集的名字,第二部分表示语言,第三部分是后缀
(1)后缀
Suffix | Meaning |
---|---|
_ai |
Accent-insensitive |
_as |
Accent-sensitive |
_ci |
Case-insensitive |
_cs |
Case-sensitive |
_bin |
Binary |
_ci暗含了_ai,_cs暗含了_as,_bin后缀比较的是字符的编码值。
三、表操作
create table tablename(
columns
)
每一列应该有一个名字,后面跟着数据类型和约束,mysql字段命名不能使用mysql的关键字
// 删除表
drop table table_name
// 清空表
truncate table_name;
// 表的查询
//通过在查询语句末尾添加\G可以实现以垂直模式显示结果(如果表行的宽度太大)
not null:此属性必须有值。
auto_increment:在表中插入行时,如果此字段为空,会自动生成一个唯一标识,该值比本列中现存在最大值更大,每个表中只能有一个这样的值,指定auto_increment的列必须是索引列。
primary key:主键。
整数后面的unsigned表示它只能是0或者一个正数。
类型 | 取值范围 | 存储空间(字节) | 描述 |
tinyint | -127...128或0...255 | 1 | 非常 小的数 |
bit | 同tinyint | ||
bool | 同tinyint | ||
smallint[(M)] | -32768~32767 | 2 | |
mediumint[(M)] | -8388608~8388607 | 3 | |
int[(M)] | -2147483648~2147483647 | 4 | |
integer[(M)] | int同义词 | ||
bitint[(M)] | 8 |
M表示zerofill属性,当显示zerofill字段中的值时,空余部分用前导0来补充,自动变为unsigned数据类型,如int(4) 显示为0003,int(7)显示为0000003。
类型 | 存储空间(字节) | 描述 |
float(精度) | 可变 | 可以指定单精度和双精度浮点数 |
float[(M,D)] | 4(8位精度) | 单精度浮点数,等同于float(4),可以指定显示宽度和小数位数 |
double[(M,D)] | 8(16位精度) | 双精度浮点数,等同于float(8),可以指定显示宽度和小数位数 |
double | double[(M,D)]的同义词 | |
precision[(M,D)] | double[(M,D)]的同义词 | |
real[(M,D)] | double[(M,D)]的同义词 | |
decimal[(M[,D]] | M+2 | 浮点数,以char存储 |
numberic[(M,D)] | decimal同义词 | |
dec[(M,D)] | decimal同义词 | |
fixed[(M,D)] | decimal同义词 |
小数点后保留两位小数:方法是在建表时直接定义此数值类型为float、double或decimal。
类型 | 取值范围 | 描述 |
date | 1000-01-01~9999-12-31 | 一个日期,以YYYY-MM-DD格式显示 |
time | -838:59:59~838:59:59 | 一个时间,以HH:MM:SS形式显示 |
datetime | 1000-01-01 00:00:00~9999-12-31 23:59:59 | 日期时间,以YYYY-MM-DD HH:MM:SS显示 |
timestamp[(M)] | 1970-01-01 00:00:00~2037年的某个时间 |
时间标签,显示格式取决于M的值 timestamp YYYMMDDHHMMSS timestamp(14) YYYYMMDDHHMMSS timestamp(12) YYMMDDHHMMSS timestamp(10) YYMMDDHHMM timestamp(8) YYYYMMDD timestamp(6) YYMMDD timestamp(4) YYMM timestamp(2) YY |
year[(2/4)] | (70~69)1970~2069, 1901~2155 | 年份 |
datetime用于表示“年月日时分秒”,是date和time的组合,并且记录的年份比较长久。datetime列可以设置为多个,默认可为null,可以手动设置其值。datetime列不可设定默认值,
timestamp列必须有默认值,但不能为null。timestamp和时区相关,当插入日期时,会先转换为本地时区后再存放,当查询日期时,会将日期转换为本地区时区后再显示,所以不同时区的人看到的同一时间是不一样的。
类型 | 取值范围 | 描述 |
[national] char(M)[binary|ascii|unicode] | 0~255个字符 | 固定长度为M的字符串,national关键字指定应该使用的默认字符集,binary指定了数据是区分大小写的(默认也是区分大小写的),ascii指定使用latin1字符集,unicode指使用usc字符集 |
char | char(1) | |
[national] varchar(M) [binary] | 1~255 | 除可变长度外,其他与char相同 |
类型 | 最大长度 | 描述 |
tinyblob | 255 | |
tinytext | 255 | text区分大小写,blob不区分 |
blob | 65535 | 65K |
text | 65535 | |
mediumblob | 2^{24}-1 | 16M |
mediumtext | 2^{24}-1 | |
longblob | 2^{32}-1 | 4G |
longtext | 2^{32}-1 | |
json |
类型 | 集合中的最大值 | 描述 |
enum('value1','value2',...) | 65535 | 该类型只可以容纳所列值之一或null |
set(‘value1','value2',...) | 64 | 可以容纳一组值或null |
四、show和describe
show [FULL] tables [from db_name] [like 'pattern']
show tables显示的是非temporary表,如果要显示其它视图,可以添加full修饰符。
show tables; --查看数据库中所有的表
show databases; --查看数据库列表
describe tablename; --查看某特定表的详细信息
五、创建索引
如果需要对一个不是主键的列运行许多查询,可以在该列上添加索引来改善性能
create [unique|fulltext] index index_name
on table_name (index_column_name [(length)] [ASC|DESC],...)
fulltext索引用来索引文本字段
length表示只有该字段的前length个字段将被 索引
CREATE INDEX 索引名 ON 表名 (列名[(length)]);
如果忽略length,则使用整个列的值作为索引。如果指定使用列前的length个字符来创建索引,这样有利于减少索引文件大小。
create index cardid_index on team (cardid);
show create table team;
ALTER TABLE 表名 ADD INDEX 索引名 (列名);
alter table team add index phone_index (phone);
CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名));
create table test(id int(4) not null,name varchar(10) not null,age int (3),cardid varchar(5) not null,index age_index(age));
CREATE UNIQUE INDEX 索引名 ON 表名(列名);
ALTER TABLE 表名 ADD UNIQUE 索引名 (列名);
CREATE TABLE 表名 ([...],PRIMARY KEY (列名));
CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,列名3 数据类型,INDEX 索引名 (列名1,列名2,列名3));
适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。
在 MySQL5.6 版本以前FULLTEXT 索引仅可用于 MyISAM 引擎,在 5.6 版本之后 innodb 引擎也支持
FULLTEXT 索引。全文索引可以在 CHAR、VARCHAR 或者 TEXT 类型的列上创建。每个表只允许有一个全文索引。
CREATE FULLTEXT INDEX 索引名 ON 表名 (列名);
show index from 表名;
show index from 表名\G; 竖向显示表索引信息
show keys from 表名;
show keys from 表名\G;
DROP INDEX 索引名 ON 表名;
ALTER TABLE 表名 DROP INDEX 索引名;
六、mysql关键字
ADD | ALL | ALTER |
ANALYZE | AND | AS |
ASC | ASENSITIVE | BEFORE |
BETWEEN | BIGINT | BINARY |
BLOB | BOTH | BY |
CALL | CASCADE | CASE |
CHANGE | CHAR | CHARACTER |
CHECK | COLLATE | COLUMN |
CONDITION | CONNECTION | CONSTRAINT |
CONTINUE | CONVERT | CREATE |
CROSS | CURRENT_DATE | CURRENT_TIME |
CURRENT_TIMESTAMP | CURRENT_USER | CURSOR |
DATABASE | DATABASES | DAY_HOUR |
DAY_MICROSECOND | DAY_MINUTE | DAY_SECOND |
DEC | DECIMAL | DECLARE |
DEFAULT | DELAYED | DELETE |
DESC | DESCRIBE | DETERMINISTIC |
DISTINCT | DISTINCTROW | DIV |
DOUBLE | DROP | DUAL |
EACH | ELSE | ELSEIF |
ENCLOSED | ESCAPED | EXISTS |
EXIT | EXPLAIN | FALSE |
FETCH | FLOAT | FLOAT4 |
FLOAT8 | FOR | FORCE |
FOREIGN | FROM | FULLTEXT |
GOTO | GRANT | GROUP |
HAVING | HIGH_PRIORITY | HOUR_MICROSECOND |
HOUR_MINUTE | HOUR_SECOND | IF |
IGNORE | IN | INDEX |
INFILE | INNER | INOUT |
INSENSITIVE | INSERT | INT |
INT1 | INT2 | INT3 |
INT4 | INT8 | INTEGER |
INTERVAL | INTO | IS |
ITERATE | JOIN | KEY |
KEYS | KILL | LABEL |
LEADING | LEAVE | LEFT |
LIKE | LIMIT | LINEAR |
LINES | LOAD | LOCALTIME |
LOCALTIMESTAMP | LOCK | LONG |
LONGBLOB | LONGTEXT | LOOP |
LOW_PRIORITY | MATCH | MEDIUMBLOB |
MEDIUMINT | MEDIUMTEXT | MIDDLEINT |
MINUTE_MICROSECOND | MINUTE_SECOND | MOD |
MODIFIES | NATURAL | NOT |
NO_WRITE_TO_BINLOG | NULL | NUMERIC |
ON | OPTIMIZE | OPTION |
OPTIONALLY | OR | ORDER |
OUT | OUTER | OUTFILE |
PRECISION | PRIMARY | PROCEDURE |
PURGE | RAID0 | RANGE |
READ | READS | REAL |
REFERENCES | REGEXP | RELEASE |
RENAME | REPEAT | REPLACE |
REQUIRE | RESTRICT | RETURN |
REVOKE | RIGHT | RLIKE |
SCHEMA | SCHEMAS | SECOND_MICROSECOND |
SELECT | SENSITIVE | SEPARATOR |
SET | SHOW | SMALLINT |
SPATIAL | SPECIFIC | SQL |
SQLEXCEPTION | SQLSTATE | SQLWARNING |
SQL_BIG_RESULT | SQL_CALC_FOUND_ROWS | SQL_SMALL_RESULT |
SSL | STARTING | STRAIGHT_JOIN |
TABLE | TERMINATED | THEN |
TINYBLOB | TINYINT | TINYTEXT |
TO | TRAILING | TRIGGER |
TRUE | UNDO | UNION |
UNIQUE | UNLOCK | UNSIGNED |
UPDATE | USAGE | USE |
USING | UTC_DATE | UTC_TIME |
UTC_TIMESTAMP | VALUES | VARBINARY |
VARCHAR | VARCHARACTER | VARYING |
WHEN | WHERE | WHILE |
WITH | WRITE | X509 |
XOR | YEAR_MONTH |
ZEROFILL |
七、optimize优化表
MySQL删除表数据(DELETE)时,MySQL并不会回收这条记录占据的存储空间以及索引位,而是空在那里,等待新的数据来弥补这个空洞。若一时半会没有数据来填补这个空洞,就会形成资源浪费。OPTIMIZE TABLE操作会整理数据文件的碎片,释放多余的空间。所以对于写操作比较频繁的表,需要根据实际情况定期进行optimize。
OPTIMIZE TABLE运行过程中,MySQL会锁定表。
1、语法
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb_name [, tbl_name] ...
常用方式
OPTIMIZE TABLE 表名;