MySQL 严格模式 sql_mode
虽然说我们尽量在写程序的时候控制插入到数据库的数据,而不要用数据库去判断数据的对错,但是有时候为了方便还是需要数据库自身的容错能力来帮助我们达到目的的。举例说明:
创建如下数据表
CREATE TABLE `book` (
`id` int(11) default NULL,
`num` int(11) unsigned default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
insert into bookvalues(1,0),(2,0)
执行update book set num='abc',竟然不报错,原因是没有启用严格模式。所以
先执行set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
然后执行update book set num='abc',数据库就报错了
如果想一劳永逸,那就直接把数据库配置文件my.ini中的相关参数设置为
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
相关文档:
变量声明
Syntax:
identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];
SQL> declare
2 a date;
3 b number(20) not null :=100;
4 c varchar2(10);
5 d constant number(20) default 1000;
6 begin
7 null;
8 end;
9 /
PL/SQL procedure successful ......
SQL code动态sql语句基本语法
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N 'select * from tableName'
-- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg: declare @fname varchar(20)
......
有以下二张表:
政党表:政党ID,政党名称
议员表:议员ID,议员名称,政党ID
要求查询所有的政党信息,包含:政党名称,议员人数,并按议员人数的降序排列(不可以用子查询)。
正解:
SELECT a.name,
COUNT(b.id) AS counts
from zhen a
left join
yi b
on a.id=b.zhenid
GROUP ......
昨天用脚本连接数据库时出现了用户登录被拒绝的提示,当然是远程连接Mysql。从网上查查发现是没有远程登录的权限。用时
用:grant all on *.* to 'user'@'192.168.XX.XX' identified by 'password';
在使用这个密令前首先要用root用户登录到需要远程访问的数据库上,然后在修改权限。 ......