#1.sql语句中对于字符串形式的数据,一定要加上引号,否则查不到数据; 例:uName='qingfeng';
#2.数据库突然连接不上?
答:可能是同时连接多个数据库,造成端口已被占用
#3.mysql替换数据中的某部分字符串
答:update 表名 set 字段名=replace(字段名,‘被替换字符串’,‘替换字符串’);
#4.sql语句select version();可以获取mysql版本;获取当前日期select current_date();获取当前时间select current_time();获取π值,select pi();计算数据select 4+1;
#5.修改auto_increment的sql语句:alter table 表名auto_increment=值;数据表的重命名alter table oldname rename to newname;修改引擎 alter table 表名 engine=innodb;
#6.mysql数据库命名规范:字母(区分大小写),0-9,以及下划线'_',共63个字符
#7.$con = mysql_connect('localhost','root','lamp69');mysql_get_server_info($con);获取数据库服务器信息
#8.修改mysql配置文件的字符集[client] default-character-set= utf8 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci skip-character-set-client-handshake [mysql] default-character-set = utf8 查看:show variables like "%char%"; show variables like 'collation_%';
#9.先前电脑中有mysql,java用的,当装了wampserver后mysql -uroot -p 进不去,关闭mysql服务,通过进程查看mysqld-nt.exe占了3306端口,把该进程kill掉,启动wampserver中的mysql服务,就可以进去了
#10.flush tables with read lock;命令执行后,该mysql中所有数据库中的所有表数据只能查询,不能再增删改(A线程加锁后,A执行增删改会报错,其他线程执行增删改会阻塞),可以在A线程下执行show processlist;命令来查看,如果有阻塞的,状态是Waiting for global read;解锁用unlock tables,A解锁后,其他线程上原来被阻塞的命令自动开始执行
#11.数据库是否支持分区,show variables like '%partition%';优化表,optimize table 表名,如果删除了表的大部分或改变了变长(varchar,blob,text)字段的值,使用优化后,删除的记录以一个链接表维持,随后的insert操作再次使用旧的记录位置,来利用旧数据未使用的空间
#12.数据库索引:普通索引就是为提高查询速度,应该为应用(查询,排列等)次数多、不经常变更、精确缩减范围的字段(性别就不加索引)添加,alter table 表名 add index 索引名(字段名);索引名任意起,起标识索引的作用,删除索引时用到;字段名两边不要加引号;唯一索引,除了提高查询速度外,一般更是为了使数据唯一,如果没有设置该字段not null的话,可以重复为null;主键索引,可以作为外键,主键不能为空,字段的数据也具有唯一性;外键索引,关联另一张表主键,保持数据一致性的索引;添加方法1,alter table 表名 add foreign key(字段名) references 表2名(表2主键)on delete cascade on update cascade;如果有后面on语句,则在删除或更新表2(主键表)中已经与表一(外键表)有关联的数据时,不再因已有关联而无法删除或更新(报错),而是表一中数据随表二中关联数据删除或更新;添加方法2是在建表语句中用 constraint 外键名(该名称任意起) foreign key(字段名) references `表2名`(·表2主键·);外键关联的两张表都得是innodb类型才可以,否则报150错;show engine innodb status; LATEST FOREIGN KEY ERROR显示错误原因;添加外键时如果报错为Cannot add or update a child row:a foreign key constraint fails,则表示表1中存在外键,在表2中没有对应的主键。字符字段只建前缀索引
#13.mysql的联合索引 alter table 表名 add index 索引名(字段1,字段2......) ; 如果建表语句是这样的:
CREATE TABLE test (
id INT NOT NULL,
last_name CHAR(30) NOT NULL,
first_name CHAR(30) NOT NULL,
PRIMARY KEY (id),
INDEX name (last_name,first_name));
以下将被索引
SELECT * FROM test WHERE last_name='Widenius';
SELECT * FROM test WHERE last_name='Widenius'
AND first_name='Michael';
SELECT * FROM test WHERE last_name='Widenius'
AND (first_name='Michael' OR first_name='Monty');
SELECT * FROM test WHERE last_name='Widenius'
AND first_name >='’M' AND first_name < 'N';
以下将不被索引
SELECT * FROM test WHERE first_name='Michael';
SELECT * FROM test WHERE last_name='Widenius'
OR first_name='Michael';
char和varchar类型的列,可以以一个列的固定长度来作为索引,如前10个字符:alter table 表名 add index 索引名(列名(10));对于BLOB和TEXT类型的列,你必须指明索引长度,也就是索引列的前缀,你不能索引列的全部
mysql的预处理 prepare 对象名 from 'sql语句';
prepare stmt from 'select * from test4 where id=?';
set @a=1;
execute stmt using @a;
deallocate prepare stmt;//取消预处理分配
mysql的事务处理 set autocommit=0; rollback;commit; 或者begin 或者starttransaction;mysql存储 procedure
#14.phpmyadmin 修改用户密码,登陆root账号,点击用户, 编辑权限,输入密码 ,点击 生成(会加密,也可以不点) , 执行, 修改程序配置文件 (更新缓存,有的需要,有的不需要)
#15.数据库中是时间戳,转成年月日时分秒用select from_unixtime(uptime) from mlc_user limit 5; 存的是年月日时分秒,转成时间戳用 select unix_timestamp(current_date());
#16.show index from 表名 查看该表的索引
#17.mysql 利用source 文件路径.sql 时报错MySQL server has gone away,执行命令show VARIABLES like '%max_allowed_packet%';运行后发现是max_allowed_packet = 1M 限制了,把设置成更大值,就导入成功了;然后导入一个2M大的sql文件时,前面导入成功,后面就断开连接了。这时就不用source了,删掉导入的部分数据。用mysql -uroot -p 库名<e:/a.sql 导入。这时又报错,默认值无效,查看了下,发现是默认值是中文。然后删掉导入的部分数据,又重新导入。用的是mysql -uroot -p --default-character-set=utf8 库名<e:/a.sql
#18.连接另一个局域网内机器的数据库,每天早上启动该数据库服务器后,有时无法链接,可能是该机器的ip和别的机器有冲突,此时修改下ip就行
#19.select sum(if(age > 0,age,0) ) from user;如果字段的值不大于0时,就当0来统计,防止负数的出现
#20.mysql 查询 中order by case when 条件 then 字段 else 字段 end的使用。例:“b.status=1 and b.preheat_time>".time()." desc,case when b.preheat_time>".time()." then b.preheat_time end,b.order desc,b.status=1 and b.borrow_end_time>".time()." desc,b.status=1 or b.status=8 desc,b.status=3 desc,b.preheat_update_time desc”