mysq数据库基本操作

时间:2023-03-09 01:52:57
mysq数据库基本操作

MySQL的数据库名称,表名称是区分大小写,MySQL 的SQL keywords不区分大小写;

if when you attempt to log in, you get an error message such as ERROR 2002 (HY000):
can't connect to local Mysql server through socket
'/tmp/mysql.sock'。(2),it means that the MySQL server daomon(Unix) or service(windows) is not running.
Consult the administrator.

if you decide you do not want to execute a query that you are in the process of entering,cancel it by tying \c;
//如果写着写着发现SQL语句写错了,可以按\c退出当前SQL编辑

MySQL 提示符
Prompt Meaning
mysql-> Ready for new query
-> Waiting for next line of multiple-line query
'> Waiting for next line,waiting for completion of a string that began with a single quote(')
"> Waiting for next line,waiting for completion of a string that begin with a double quote(")
`> waiting for next line,waiting for completion of an identifier that began a backtick(·)
/> Waiting for next line,waiting for completion of a comment that began with /

Multiple-line statements commonly occur by accident

The '> and "> prompts occur during string collection(another way of saying that MySQL is waiting for completion of a string)。
In MySQL,you can write strings surrounded by either ' or " characters(for example, 'hello' or "goodbye"),and mysql lets you enter

mysql 介绍

mysql --help

GRANT ALL ON managerie.* TO ‘your_mysql_name’@'your_client_host';

SELECT DATABASE();//查看当前正在使用的数据库

如何填充数据表?

①、填充数据从文件

LOAD DATA LOCAL INFILE '文件地址' INTO TABLE pet;

例如: LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;

你能创建一个文本文件pet.txt,一个记录一行,
每个值由tab分割,一行值的顺序要和创建表的字段顺序一致。
如果不想给一个字段值,你能使用null值,
但是在文本文件中,使用\N代替null。

如果你创建的文本文件是在windows系统上使用编辑器,编辑器默认使用\r\n作为行结束符,
你需要使用下面的语句:

LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet LINES TERMINATED BY '\r\n';

在苹果机器上,例如os X,你需要使用如下的语句来导入数据,

LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet LINES TERMINATED BY '\r';

how to retrieving information?

SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy;

MySQL逻辑操作符

and 和 or,and 优先级高于or的优先级。

null值的比较

看一个字段是否是null值,使用IS NULL,和IS NOT NULL 操作符
不能使用算术比较操作符例如 =,<,或者 <>比较null值。

在MySQL中,0或者null代表false,其他的代表true。

对于MySQL中的group by null值,连个null值是相等的。

在MySQL中, 0和空字符串不是null。

MySQL中的模式匹配??????

_匹配任意一个字符。
%匹配任意数量的字符串,

在MySQL中,默认,SQL匹配是不区分大小写的。

在SQL模式匹配中,不能使用=(等于)或者<>(不等于),使用LIKE或者NOT LIKE 比较操作符。

①、查询以b开头的 'b&'
②、查询以fy结尾的。'%fy'
③、查询包含w。'%w%'
④、查询确切地五个字符,使用五个_模式字符。 '_____'

MySQL中,一些可扩展的正则表达式特点:

MySQL中,正则表达式,
[NOT] REGEXP 正则表达式字符串。
①、.匹配任意一个字符。
②、[...]匹配任何字符序列之内的任意一个字符。例如:[abc] 匹配任何一个a,b,c
罗列一个范围的字符。使用-
③、匹配0个或者多个前面的字符,例如:x匹配任意数量的x字符,[0-9]匹配任意数量的数字,.匹配任意数量东西。

④、为了匹配整个值,必须^开头,以$结尾。

为了强制使用REGEXP 严格区分大小写,使用 BINARY 关键字把普通字符串转化为二进制字符串。

统计多少行??

多表查询?????

多表查询注意的地方:
①、需要两个表中的字段时,使用join。
②、join两个表的on,两个表关联的条件。
inner join 需要on.字段,两个表中的值都相等,才匹配。
③、如果两个表中都有的字段,必须指定表前缀。

获取更短关于数据库和表。

show databases;//查询所有的数据库
select database();//查看当前正在使用的数据库,如果没有选择任何数据库,这个结果是null。

show tables;//查看所有表

describe 表;//查看表结构

Field Type Null Key Default Extra
字段名称 字段类型 字段是否可以包含null值 字段是否使用索引 字段默认值 关于字段的指定信息,例如如果字段是自动增长,则会显示

desc 是 describe 的简写。

show create table 表名称;

show index from 表名称;//查看一个表的索引。

普通查询的例子

一个字段的最大值???

select max(字段) as 字段别名 from 表名称;

查询一个字段的最大值的,一行数据

CREATE TABLE shop (
article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
dealer CHAR(20) DEFAULT '' NOT NULL,
price DOUBLE(16,2) DEFAULT '0.00' NOT NULL,
PRIMARY KEY(article, dealer));
INSERT INTO shop VALUES
(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),
(3,'C',1.69),(3,'D',1.25),(4,'D',19.95);

①、子查询
SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop);
②、左连接
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.price < s2.price
WHERE s2.article IS NULL;
③、order by 排序 limit
SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;

注意:使用order by排序,如果最大的值,有多个,只会显示一条数据。

3、每个分组最大的值

SELECT article, MAX(price) AS price
FROM shop
GROUP BY article;

5.使用用户自定义的变量

你可以采用用户变量来记住结果,而不是把结果存储在客户端的临时变量中。

例子:为了发现样品中的最高和最低的价格
SELECT * FROM shop WHERE price=@min_price OR price=@max_price;

SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;

注意: 也可以存储数据库对象的name例如一个table或者一个字段在用户变量,
然后在SQL中使用用户变量。

6、使用外键?

在mysql数据库中,Innodb数据表支持外键约束。

一个外键约束不仅仅支持联合两个表。对于Innodb以外的表,
定于一个字段使用peferences 表名称(字段),没有实际意义,仅仅作为一个注释,
现在定义的字段关联另一表的那个字段,

show create table shirt\G;

在除了innodb引擎以外的存储引擎,使用peferences 作为注释

7、搜索两个索引

如果一个索引字段使用or是已经优化的,因为它被当做and处理。

如果两个索引字段使用or需要优化这个SQL,可以使用联合查询。

8、统计每天的访问量

一个例子:
如何使用bit group 函数计算一个web页面每个月有少天的访问。

CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL,
day INT(2) UNSIGNED ZEROFILL);
INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),
(2000,2,23),(2000,2,23);

例子:为了统计每年,每月每天,用户访问的web页面数量。

为了确定每个月有多少天访问。

SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1
GROUP BY year,month;

9.使用自动增长???????

auto_increment 属性

如果一个字段被定义为not null,也可以对这个字段使用null,自动自动增长的序列。

更新存在的auto_increment 字段,在innodb表,不重新设置auto_increment序列,除了myisam和ndb表。

例如:
如果是innodb存储引擎的表

注意:
如果插入多行,last_insert_id()和mysql_insert_id()实际上返回自动增长第一个插入的值。

自动增长从1开始,create_table和alter table,
在创建表和修改表时,
alter table 表名称 auto_increment = 100;