MySQL学习笔记

数据库名字:test_mysql

数据库表名字:test_table

win7环境mysql服务启停:net start/stop mysql

Linux环境mysql服务启停:/etc/init.d/mysqld start/stop/status/restart

1、创建数据库

create database test_mysql;  小写字母创建
CREATE DATABASE test_mysql;  大写字母创建

2、创建表

create table test_table (id int primary key, value varchar(255));
create table test_table_copy as select * from test_table;    采用复制另一张表的方式创建表,新表与旧表中数据一致,但无法复制主键类型和自增方式
create table test_table_copy like test_table;                所有数据类型和完整性约束条件都能被复制,包括主键和自动增长,但是无法指定属性或属性组,新建的数据库为空表
insert into test_table_copy select * from test_table;        往新建的表中复制旧表中的所有数据

3、插入

INSERT INTO test_table (id, value) VALUES (6, 4282023451287445924);

4、删除表

drop table test_table;              删除表本身,表中数据、表中结构被全部删除
delete from test_table;             删除表中的数据,但是表还存在
delete from test_table where ID=1;  删除表中指定条件的数据
truncate table test_table;          删除表中的数据,但是表还存在,不能跟where子句

5、查询表结构

desc test_table;
show columns from test_table;
show full fields from test_table;       查看权限和备注等信息

查询结果字段说明:
Field:字段表示的是列名
Type:字段表示的是列的数据类型
Null:字段表示这个列是否能取空值
Key:在mysql中key 和index 是一样的意思,这个Key列可能会看到有如下的值:PRI(主键)、MUL(普通的b-tree索引)、UNI(唯一索引)
Default: 列的默认值
Extra:其它信息

6、查询表状态

show table status like "test_table";

7、修改数据库字段名字、备注

ALTER TABLE test_table CHANGE old_value new_value VARCHAR(255);
alter table test_table modify column field_name varchar(255) comment '备注';

8、增加数据库字段

ALTER TABLE test_table ADD address VARCHAR(255);

9、删除数据库字段

ALTER TABLE test_table DROP address;

10、主键和外键

(1)主键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键,主键只能有一个,用来保证数据完整性

(2)外键:表的外键是另一表的主键,外键可以有重复的,可以是空值,用来和其他表建立联系用的,一个表可以有多个外键

CREATE TABLE mainkey (number VARCHAR(255) PRIMARY KEY, data INT);
CREATE TABLE foreignkey (no VARCHAR(255), CONSTRAINT fk_mainkey FOREIGN KEY (no) REFERENCES mainkey(number), data INT);
CREATE TABLE foreignkey1 (no VARCHAR(255), CONSTRAINT fk1_mainkey FOREIGN KEY (no) REFERENCES mainkey(number) ON UPDATE CASCADE, data INT);
UPDATE mainkey set number="123456789" where data=123;   执行该语句更新主键mainkey中的数据,会同时更新外键foreignkey1中的数据,因为设置了ON UPDATE CASCADE

11、视图

       关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要将多个表连接起来进行查询任务。对于复杂的查询事件,每次查询都需要编写MySQL代码效率低下。为了解决这个问题,数据库提供了视图(view)功能。

       和数据库相对应,每次进行查询工作,都需要编写查询代码进行查询;而视图的作用就是不必每次都重新编写查询的SQL代码,而是通过视图直接查询即可。

CREATE VIEW test_view as select * from test;    单表视图
CREATE VIEW multi_view as select test.value, test.phone, TEST_UP.test_data from test, TEST_UP where test.phone=TEST_UP.test_data;     多表视图
ALTER VIEW test_view as select value, phone from test; 修改视图,增加或者删除视图中的字段
drop view test_view;
show create view test_view;
show table status like 'test_view';

12、聚合函数

在数据库当中,函数分为两种:单行函数和多行函数,相应概念如下:
单行函数:每一行返回一个数值(如lower)
多行函数:多行返回一个数值(如count)
聚合函数:多行函数,即表中的多条记录返回至一个数值,通常用于分组的相关信息

常用聚合函数:

  • count(*):统计表中所有记录的个数
  • count(列名):统计一列中值的个数,其中重复的记录也会被当做有效的记录。
  • count(distinct 列名):统计一列中值的个数,其中重复的记录只会被记录一次。
  • sum(列名):计算一列值的总和。
  • avg(列名):计算一列值的平均值。
  • max(列名):计算一列值中的最大值。
  • min(列名):计算一列值中的最小值。
select sum(id) from test_table;
select count(distinct address) from test_table;
select count(*) com from test_table;
select count(phone) from test_table;

13、mysql查看用户

use mysql;      切换到mysql database
select user from user;   查看表user中已经存在的用户信息

14、mysql新增用户

CREATE USER test_user IDENTIFIED BY "test1234";     为MySQL创建新用户

15、mysql用户分配权限

GRANT语法:
GRANT 权限 ON 数据库.* TO 用户名@'登录主机' IDENTIFIED BY '密码'  
权限:  
    ALL,ALTER,CREATE,DROP,SELECT,UPDATE,DELETE  
    新增用户:权限为USAGE,即为:"无权限",想要创建一个没有权限的用户时,可以指定USAGE  
数据库:  
    *.*                       表示所有库的所有表  
    test_mysql.*              表示test_mysql库的所有表  
    test_mysql.test_table     表示test_mysql库的test_table表   
用户名:  
    MySQL的账户名,如“test_user”
登陆主机:  
    允许登陆到MySQL Server的客户端ip  
    '%'             表示所有ip  
    'localhost'     表示本机  
    '10.69.123.23'  特定IP  
密码:  
    MySQL的账户名对应的登陆密码,如“test1234”


命令举例:
GRANT ALL ON test_mysql.* TO "test_user"@"%" IDENTIFIED BY "test1234";    分配test_user拥有test_mysql库中所有表的操作权限,且可以从任何客户端登录到mysql的服务端进行操作
FLUSH PRIVILEGES;    刷新权限
SHOW GRANTS for test_user;   查看赋予用户test_user的权限

16、mysql用户撤销权限

命令:REVOKE PRIVILEGES ON database.tablename FROM "username"@"host";
例如:REVOKE delete ON test_mysql.test_table FROM "test_user"@"%";

17、mysql设置root用户权限

set password for root@localhost = password('123');   直接设置密码

use mysql; 
update user set password=password('123') where user='root' and host='localhost';   修改user表中数据的方式进行修改
flush privileges;

18、mysql用户删除

DROP USER "test_user"@"%";

19、存储过程

use test_mysql;
set @original_data="13112345678,
13212345678,
13312345678,
13412345678"; -- 定义源数据

set @len=4;  -- 计算数据的长度,以逗号分隔为一个数据
set @data=replace(@original_data,"\n","");  -- 去掉源数据中的换行符

采用存储过程,往表中循环插入源数据
DROP PROCEDURE IF EXISTS proc_initData;   -- 存在则删除
DELIMITER $
CREATE PROCEDURE proc_initData()
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i<=@len DO
	set @sub_data=substring_index(substring_index(@data,",",i),",",-1);
        INSERT INTO test_table(id,phone) VALUES(i, @sub_data);
        SET i = i+1;
    END WHILE;
END $
CALL proc_initData();


语法说明:
1、字符串截取:substring(str, pos); substring(str, pos, len)
2、字符串截取:substring_index(str,delim,count),截取第count个'delim'之前的所有字符
    举例:
    截取第二个'.'之前的所有字符
    mysql> select substring_index('www.example.com', '.', 2);

    截取第二个'.'(倒数)之后的所有字符
    mysql> select substring_index('www.example.com', '.', -2);
3、字符串替换:replace(object,search,replace_str),把object中出现search的全部替换为replace_str

20、mysql中的function

查看数据库的函数功能是否开启:

show variables like '%func%';                   查看函数功能是否开启
SET GLOBAL log_bin_trust_function_creators=1;   开启函数功能
SET GLOBAL log_bin_trust_function_creators=0;   关闭函数功能

结合存储过程和自定义函数,往数据库中循环插入数据:

use test;
set @original_data="13112345678,
13212345678,
13312345678,
13412345678"; -- 定义源数据

set @len=4;  -- 计算数据的长度,以逗号分隔为一个数据
set @data=replace(@original_data,"\n","");  -- 去掉源数据中的换行符

采用自定义函数,往表中插入一条数据
DROP FUNCTION IF EXISTS my_insert_func;    -- 存在则删除
DELIMITER $
CREATE FUNCTION my_insert_func(x INT, d VARCHAR(255))
returns INT
BEGIN
    INSERT INTO test_table(id,phone) VALUES(x, d);
    return x;
END $

采用存储过程,调用自定义函数,往表中循环插入源数据
DROP PROCEDURE IF EXISTS my_insert_proc;    -- 存在则删除
DELIMITER $

CREATE PROCEDURE my_insert_proc()
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i<=@len DO
	set @sub_data=substring_index(substring_index(@data,",",i),",",-1);
        select my_insert_func(i, @sub_data);       采用调用函数的方式,往数据中插入数据
        SET i = i+1;
    END WHILE;
END $
CALL my_insert_proc();

 

 

备注:

MySQL常见错误类型:https://www.cnblogs.com/yangliheng/p/5871202.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值